2017-02-22 3 views
0

Ich habe eine Schaltfläche zum Löschen in meiner GridView hinzugefügt. Aber das Problem ist, es löscht immer die erste Zeile.Schaltfläche löschen löschte nur die erste Zeile in der Gridview

Zum Beispiel, wenn ich die zweite oder dritte Zeile lösche, werden die Daten in der ersten Zeile gelöscht. Ich möchte nur die Taste, um die Zeile daneben zu löschen:

public void bindgrid() 
{ 
    SqlConnection conn = new SqlConnection("cnString"); 
    SqlCommand cmd = new SqlCommand("select Id,Name, from myTable ", conn); 
    SqlDataAdapter da = new SqlDataAdapter("", conn); 
    da.SelectCommand = new SqlCommand("select Id,Name, from myTable", conn); 
    DataSet ds = new DataSet(); 
    da.Fill(ds, "data"); 
    gridview1.DataSource = ds.Tables[0].DefaultView; 
    gridview1.DataBind(); 
} 


protected void gdview_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    int userid = int.Parse(gridview1.DataKeys[0].Value.ToString()); 
    SqlConnection conn = new SqlConnection("cnString"); 
    SqlDataAdapter da = new SqlDataAdapter("", conn); 
    conn.Open(); 
    da.DeleteCommand = new SqlCommand("delete from myTable where Id=" + userid , conn); 

    da.DeleteCommand.ExecuteNonQuery(); 
    conn.Close(); 
    bindgrid(); 
} 
+0

müssen Sie die Zeile indes bekommen, wo Sie –

+0

geklickt Sie für ausgewählte Reihe von gridview aussehen sollte, dann nehmen Sie ID dieser Zeile und gehen dann zum Löschen part.It mir scheint, dass Sie immer ID sind Grabbing von erste Zeile – Veljko89

Antwort

3

Sie sollten den aktuellen Zeilenindex statt gridview1.DataKeys[0]

protected void gdview_RowDeleting(object sender, GridViewDeleteEventArgs e) 
    { 
    int userid = int.Parse(gridview1.DataKeys[e.RowIndex].Value.ToString()); 
    SqlConnection conn = new SqlConnection("cnString"); 
    SqlDataAdapter da = new SqlDataAdapter("", conn); 
    conn.Open(); 
    da.DeleteCommand = new SqlCommand("delete from myTable where Id=" + userid , conn); 

    da.DeleteCommand.ExecuteNonQuery(); 
    conn.Close(); 
    bindgrid(); 
    } 
+0

Ich bekomme diesen Fehler, wenn ich e.rowIndex verwende: (CS1061: 'System.Web.UI.WebControls.GridViewDeleteEventArgs' enthält keine Definition für 'rowIndex' und keine Erweiterungsmethode 'rowIndex' akzeptiert ein erstes Argument vom Typ) – azza

+0

es funktionierte jetzt Dank ich habe e.RowIndex anstelle von e.rowIndex verwendet, um den Fehler zu vermeiden – azza

+0

immer willkommen! – Sankar

0

Das Problem ist in unter Leitung

int userid = int.Parse(gridview1.DataKeys[0].Value.ToString()); 

Sie sind immer die Benutzer-ID der ersten Reihe immer mit [0]

Holen Sie den passenden Wert von "e" und übergeben Sie das.

e.RowIndex 
0

etwas llike diesem

GridViewRow row = gridview1.Rows[e.RowIndex]; 
int userid = int.Parse(row[0].Value.ToString()); 
0

passieren Ersetzen Sie diese Zeile

int userid = int.Parse(gridview1.DataKeys[0].Value.ToString()); 

auf diese

int userid = int.Parse(gridview1.DataKeys[e.RowIndex].Value.ToString()); 
+0

Ich bekomme diesen Fehler: (Die beste überladene Methodenübereinstimmung für 'int.Parse (string)' hat einige ungültige Argumente) – azza

Verwandte Themen