2017-02-22 34 views
0

Я добавил кнопку удаления в свой GridView. Но проблема в том, что она всегда удаляет первую строку.Удалить только удалил первую строку в gridview

Например, если я удаляю вторую или третью строку, данные в первой строке будут удалены. Я просто хочу кнопку, чтобы удалить строку рядом с ним:

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

вам нужно получить строки Indes где вы кликали –

+0

Вы должны искать для выбранной строки GridView, а затем взять идентификатор этой строки, а затем идти на удаления part.It мне кажется, что вы всегда захватывая идентификатор первая строка – Veljko89

ответ

3

Вы должны пройти текущий индекс строки вместо 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

Я получаю эту ошибку, когда использую e.rowIndex: (CS1061: «System.Web.UI.WebControls.GridViewDeleteEventArgs» не содержит определения для «rowIndex» и никакого метода расширения «rowIndex», принимающего первый аргумент типа) – azza

+0

теперь сработало спасибо, что я использовал e.RowIndex вместо e.rowIndex, чтобы избежать ошибки – azza

+0

всегда приветствуем! – Sankar

0

Проблема заключается в ниже линии

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

Вы всегда получаете идентификатор пользователя первой строки с помощью [0]

Получите соответствующее значение от "e" и передайте это.

e.RowIndex 
0

что-то llike этого

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

Замените эту строку

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

этому

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

Я получаю эту ошибку: (Наилучшее перегруженное соответствие метода для 'int.Parse (string)' имеет некоторые недопустимые аргументы) – azza