Et site med kursusmaterialer, der bruges i forbindelse med undervisning i forskellige it relaterede emnerEn skøn grafik du kan nyde mens der undervises.
   

Send spørgsmål eller kommentar til Thor - klik her: Send en kommentar til Thor - omkring undervisning eller kursus  Søg i kursusmaterialerne. Kan bruges i forbindelse med undervisningen eller efter kurset  Til forsiden af kursusmaterialer.dk 

 

ASP.NET II / Dataset og datagrid objektet / Ret post Tag dig ikke af dette flag - det er bare en besked til underviseren om, at der er undervisernote knyttet til ASP.NET II kursus, Dataset og datagrid objektet, Ret post


ASP.NET fjernundervisningskursus

- Vil du gerne på kursus NU?

- Vil du gerne lære i dit eget tempo?

- Har du ikke tid til at tage på kursus ude i byen?

Så køb et kursus i ASP.NET som fjernundervisning på www.it-fjernundervisning.dk


Ret post i datasettet

Det minder meget om de foregående:

  • Vi skal indstille vores datagrid - dvs. tilføje Edit, Update, Cancel kolonnen og fortælle hvilken kolonne, der er primærkolonne.
  • Vi skal sætte kommandoer på
  • Vi skal skrive koden (der er så 3 routiner til edit, update og cancel)

Dette er så koden:

VB.NET

    Private Sub dgridAndeby_CancelCommand(ByVal ...
        dgridAndeby.EditItemIndex = -1
        DoDatabind()
    End Sub
    Private Sub dgridAndeby_EditCommand(ByVal ...
        dgridAndeby.EditItemIndex = e.Item.ItemIndex
        DoDatabind()
    End Sub
    Private Sub dgridAndeby_UpdateCommand(ByVal ...
        Dim objRows() As DataRow
        Dim dsetAndeby As New DataSet
        Dim strSelect As String
        strSelect = "ID='" + CStr(dgridAndeby.DataKeys(e.Item.ItemIndex)) + "'"
        dsetAndeby = GetDataset()
        objRows = dsetAndeby.Tables(0).Select(strSelect)
        objRows(0).Item("Fornavn") = CType(e.Item.Cells(1).Controls(0), TextBox).Text
        dsetAndeby.WriteXml(Server.MapPath("Andeby.xml"))
        dgridAndeby.EditItemIndex = -1
        DoDatabind()
    End Sub

Som man kan se, er der dukket en ny funktion op, der hedder GetDataset() og det afføder også en lille ændring i DoDatabind():

Private Function GetDataset() As DataSet
        Dim dsetAndeby As New DataSet
        dsetAndeby.ReadXml(Server.MapPath("Andeby.xml"))
        Return dsetAndeby
    End Function
    Private Sub DoDatabind()
        Dim objDataView As DataView

        objDataView = GetDataset().Tables(0).DefaultView
        dgridAndeby.DataSource = objDataView
        dgridAndeby.DataBind()
    End Sub

C#

  private void CancelEdit(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   dgridAndeby.EditItemIndex = -1;
   DoDatabind();
  }
  private void DoEdit(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   dgridAndeby.EditItemIndex = e.Item.ItemIndex;
   DoDatabind();
  }
  private void UpdateEdit(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   DataRow []objRows;
   DataSet dsetAndeby = DataSet();
   dsetAndeby = GetDataset();

   String strSelect = "ID='" + (string)dgridAndeby.DataKeys[e.Item.ItemIndex] + "'";
   objRows = dsetAndeby.Tables[0].Select(strSelect);
   objRows[0]["Fornavn"] = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
   dsetAndeby.WriteXml(Server.MapPath("Andeby.xml"));
   dgridAndeby.EditItemIndex = -1;
   DoDatabind();
  }

Som man kan se, er der dukket en ny funktion op, der hedder GetDataset() og det afføder også en lille ændring i DoDatabind():

private DataSet GetDataset()
  {
   DataSet dsetAndeby = new DataSet();
   dsetAndeby.ReadXml(Server.MapPath("Andeby.xml"));
   return dsetAndeby;
  }
  private void DoDatabind()
  {
   DataView objDataView;
   objDataView = GetDataset().Tables[0].DefaultView;
   dgridAndeby.DataSource = objDataView;
   dgridAndeby.DataBind();
  }

Bemærk, at Item objektet har en FindControl metode, man kan bruge i stedet for at skulle indeksere sig igennem cellerne - den virker bare bedst på template kolonner, som vi skal se på om lidt.

 


Opgave

  • Få det til at virke
  • Også for de andre felter
  • Kan du lave det sådan, at man ikke kan komme til at rette i kundenummeret?
   
Spacer Spacer Spacer Spacer