[C#] Delete-funktion --> falsche ID wird übergeben

GridView1.DataKeys[e.Keys["ID"]].Value.ToString();

Gibt folgendes zurück:
Error 3 The best overloaded method match for 'System.Web.UI.WebControls.DataKeyArray.this[int]' has some invalid arguments D:\Projects\Projects_2007\bluestep.DownloadManager.Solution\bluestep.DownloadManager\bluestep.DownloadManager\DownloadList.aspx.cs 123 33 bluestep.DownloadManager

und

Error 4 Argument '1': cannot convert from 'object' to 'int' D:\Projects\Projects_2007\bluestep.DownloadManager.Solution\bluestep.DownloadManager\bluestep.DownloadManager\DownloadList.aspx.cs 123 52 bluestep.DownloadManager

GridView1.DataKeys[e.RowIndex].Value.ToString();

gibt folgendes zurück: Die richtige ID und der richtige Datensatz wird gelöscht
 
Öhm..ja ich habe bei meiner edit-funktion auch das Problem dass der falsche Datensatz editiert wird obwohl der richtige Datensatz geladen wird. Mit dem codesnippet von Konstantin Gross hab ich es auch schon versucht aber das funktioniert nicht.

Hier die editfunktion:

C#:
void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {

            // holen uns die ID des datensatzes
            // TODO: Verwenden einer eindeutigen ID und nicht des DL-Namens!-->erledigt
            Guid ID = new Guid(this.GridView1.Rows[e.NewEditIndex].Cells[COLUMN_ID].Text.ToString());
            
            Response.Redirect("test.aspx?ID=" + ID.ToString());
           
            
          

            
                      
        }
 
Ah ok, ich weiß zwar jetzt nicht genau welche Priorität dieses Steuerelemt hat, aber ich vermute mal es erbt trotzdem von einem Button ab. Das Problem was du gerade hast ist, dass der RowEditing-Event vor dem Click-Event deines Buttons abgearbeitet wird. Warum das so ist, siehe ASP.NET Page Lifecycle. Das erklärt zummindest, warum du den falschen Datensatz bekommst. Du könntest das ganze ja in den Handler deines "Buttons" einbauen.
 
Nun wenns so ist, würde ich mir das Event mal Schritt für Schritt im Debugger anschauen, sprich, welchen Wert hat e.NewEditIndex genau, eventuell ändert sich der Index nicht, also ich sehe keinen Fehler, mein einziger Tipp ist, das ganze im Debugger auseinander zunehmen. Ist ja sonst eigenartig dass das löschen geht aber nicht das editieren.
 
Nun das e.NewEditIndex hat beim obersten Datensatz (der wirlich editiert wird) immer 0,logisch.
Und der zweite Datensatz hat dann 1, es wird auch dei ID richtig übergeben..er lädt auch den richtigen Ds aber anscheinend dürft ein der Schreibfunktion was nicht stimmen, nur seh ich mit dem Debugger nicht wo und wie er auf die vom obersten Ds kommt.

Updatefunktion:

C#:
/// <summary>
        /// Updatet den geänderten Download 
        /// </summary>
        /// <param name="dl"></param>
        /// <returns></returns>
        public bool AddUpdateDownload(Download dl)
        {
            //erstellt eine neue DataTable
            dt = GetDownloads();
            
            //setzt den wert des Indexes auf -1, um Fehler zu vermeiden
            int index = 0;
            // schau'ma nach obs schon einen download mit der gegebenen ID gibt...
            Download existingDownload = GetDownload(dl.ID, dt,ref index);
            
            
            if (existingDownload!= null)
            {
                //jetzt steht fest, dass es den download schon mal gab ...
                dt.Rows[index]["Name"] = dl.Name;
                dt.Rows[index]["Url"] = dl.Url;
                dt.Rows[index]["CreationTime"] = dl.CreationTime;
                dt.Rows[index]["Description"] = Helper.PrepareCDATA(dl.Description, false);
                
            }
            else
            {   
                //erstellt eine neue DataRow
                DataRow newRow = dt.NewRow();
                newRow["ID"] = Guid.NewGuid();
                newRow["Name"] = dl.Name;
                newRow["Url"] = dl.Url;
                newRow["CreationTime"] = dl.CreationTime;
                newRow["Description"] = Helper.PrepareCDATA(dl.Description, false);
                
                
                // wir fügen den neuen download unten hinzu...
                dt.Rows.Add(newRow);
            }
            //schreibt den neuen Downloadtag ins Xml-File 

            //ds.WriteXml(this.XmlFilePath);
            ds.Tables.Clear();
            ds.Tables.Add(dt);
            ds.WriteXml(this.XmlFilePath);

            return true;
        }
 

Neue Beiträge

Zurück