Announcement

Collapse
No announcement yet.

Datagrid Edit vom Magazine Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datagrid Edit vom Magazine Problem

    Hallo zusammen,
    ich habe mit den Artikel von P. Lorenz angeschaut, und danach auch im ASP.Net Kochbuch gesehen das man im Datagrid die Zeilen verändern kann, jedoch funtzt das beispiel bei mir nicht und ich habe echt keine ahnung warum nicht?

    hier der Code von mir:

    <pre>
    public void UpdateNav(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    TextBox tb_Titel = (TextBox) e.Item.Cells[1].Controls[0];
    TextBox tb_BannerPicture = (TextBox) e.Item.Cells[2].Controls[0];
    TextBox tb_nOrder = (TextBox) e.Item.Cells[3].Controls[0];
    TextBox tb_isVisible = (TextBox) e.Item.Cells[4].Controls[0];

    int ID = (int) DataGrid1.DataKeys[e.Item.ItemIndex];

    OleDbConnection conn = new
    OleDbConnection(System.Configuration.Configuration Settings.AppSettings["oleDbConnection1.ConnectionString"]);
    conn.Open();

    OleDbCommand cmd = new OleDbCommand();
    cmd.Connection = conn;
    cmd.Parameters.Add("@navTitel", tb_Titel.Text);
    cmd.Parameters.Add("@navBanner", tb_BannerPicture.Text);
    cmd.Parameters.Add("@navOrder", Convert.ToInt32(tb_nOrder.Text));
    cmd.Parameters.Add("@navVis", Convert.ToBoolean(tb_isVisible.Text));
    cmd.Parameters.Add("@iID", ID);
    cmd.CommandText = "UPDATE tblNavigation SET tblNavigation.Titel = @navTitel, tblNavigation.BannerPicture = @navBanner, tblNavigation.nOrder = @navOrder, tblNavigation.isVisible = @navVis WHERE (((tblNavigation.Navigation_ID)=@iID) AND ((tblNavigation.isTopNavigation)=-1));";
    cmd.ExecuteNonQuery();

    conn.Close();

    DataGrid1.EditItemIndex = -1;
    UpdateDataSource();
    }
    </pre>

    Hat einer eventuell eine Ahnung was ich hier falsch mache? Das Problem ist wenn ich die Textboxen ausgebe nach dem Update, bekomme ich die Datenbank werte raus, aber nicht die werte die ich neu eingegeben habe?

    Grüsschen Andreas

  • #2
    Hallo,

    ich würde zuerst prüfen, welchen Wert die Zeile <i>int ID = (int) DataGrid1.DataKeys[e.Item.ItemIndex];</i> tatsächlich zurückliefert. Ich greife in meinem Beispiel auf <b>EditItemIndex</b> zurück, um den DataKeys-Eintrag zu finden. Allerdings habe ich nur die VB.NET-Fassung zur Hand :-)
    <pre>
    Private Sub DataGrid1_UpdateCommand(ByVal source As Object, _
    ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles DataGrid1.UpdateCommand
    ' Schritt 1: Betroffene DataRow-Instanz im DataSet ermitteln
    Dim iKDNID As Integer = DirectCast(Me.DataGrid1.DataKeys(Me.DataGrid1.Edit ItemIndex), Integer)
    Dim aDR As DataRow
    aDR = Me.DataSetANRKDN1.KDN.Rows.Find(iKDNID)
    ' Schritt 2: Betroffene DataGridItem-Instanz ermitteln
    Dim aDGI As DataGridItem = Me.DataGrid1.Items(Me.DataGrid1.EditItemIndex)
    ' DataRow aktualisieren
    aDR("ANRID") = DirectCast(aDGI.FindControl("DropDownList1"), DropDownList).SelectedItem.Value
    aDR("NName") = DirectCast(aDGI.Cells(4).Controls(0), TextBox).Text
    aDR("VName") = DirectCast(aDGI.Cells(5).Controls(0), TextBox).Text
    ' Editiermodus verlassen
    Me.DataGrid1.EditItemIndex = -1
    Me.DataGrid1.DataBind()
    '
    Me.SqlConnection1.Open()
    Try
    ' Die Datenmenge ANR wird niemals geändert (Nachschlage-Tabelle), daher muss nur die
    ' Datenmenge KDN zurückgeschrieben werden
    Me.SqlDataAdapter2.Update(Me.DataSetANRKDN1, "KDN")
    Finally
    Me.SqlConnection1.Close()
    End Try
    End Sub
    </pre&gt

    Comment


    • #3
      Hallo,

      thx für Deine Antwort, also die ID gibt den wert der zu bearbeiten Spalte zurück, also keine andere, nur eben wenn ich ein Feld egal welches editieren möchte dann passiert nichts?.
      Zurück bekomme ich wenn ich alle TextBox tb_Titel = (TextBox) e.Item.Cells[1].Controls[0]; abfrage die werte die in der Datenbank drin wanre, aber nciht die werte die ich neu eingegeben habe?
      Irgendwie blicke ich bei diesem problem nicht durch.

      Grüsschen Andrea

      Comment


      • #4
        Hallo,

        wenn der Anwender einen Datensatz im DataGrid in den Editiermodus schalten will, indem er auf den "Edit"-Button klickt, reagieren wir mit der Zuweisung <i>DataGrid1.EditItemIndex = e.Item.ItemIndex</i> darauf. Das DataGrid zeigt dann TextBoxen für die editierbaren Infos an und ändert die Buttonbeschriftung in der Voreinstellung von "Edit" zu "Update".

        Wenn der Anwender dann den "Update"-Button anklickt, können wir darauf reagieren, indem die zur Zeit in den TextBox-Instanzen stehenden Werte über die Eigenschaft <b>Text</b> ausgelesen werden. Ich würde daher zur Fehlereingrenzung zuerst diese Werte über die Benutzeroberfläche (Bsp: Listbox im Web Form) ausgeben. Da die vom DataGrid automatisch erzeugten TextBox-Instanzen keine Namen haben, die wir bereits zur Compilierungszeit kennen, ist der Zugriff über die Cells- bzw. Controls-Kollektion üblich. Erst dann, wenn die "richtigen" Daten erscheinen, lohnt sich der Schreibzugriff auf die Datenbank

        Comment


        • #5
          Hallo,

          es ist mir schon klar das ich die Textboxen auslesen muss, nur mein Problem ist es das wenn ich mal schritt für schritt gehe immer die alten werte zurück bekommen, auch wenn ich in eine Textbox einen neuen wert eingeben bekomme ich den alten wert zurück.

          Hier liegt mein Problem und laut beispiel muss es ja so heissen:

          TextBox tb_Titel = (TextBox) e.Item.Cells[1].Controls[0];

          nur eben zurück bekomme ich nur das was vorher drin stand. ?

          ich habe echt keine ahnung an was das liegt :-(

          Grüsschen Andrea

          Comment


          • #6
            Hallo Andreas!

            Vermutlich fragst Du bei der Datenbindung nicht auf IsPostBack ab.

            Typischerweise würde das innerhalb von Page_Load so aussehen:

            if(this.IsPostBack == false) {
            // Datenbindung

            Comment


            • #7
              Hallo,

              doch, das hatte ich lustigerweise gemacht.
              Jetzt aber der beste hammer, ich habe 3 tage daran gearbeitet und es einfach nicht fertig gebracht, war 3 tage in dem urlaub und als ich zurück kam und es nochmals debugte lief es???

              Komische sache, naja jetzt klappts das ist mal gut,
              THX für eure Hilfen.

              Patrick deine Bücher sind übrigens einsamme klasse :-)
              So nebenbei gesagt.

              Grüsschen Andrea

              Comment

              Working...
              X