private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string str="DELETE from employee where e_id = @Id";
sqlDeleteCommand1=new SqlCommand(str,sqlConnection1);
sqlDeleteCommand1.Parameters.Add(new SqlParameter("@Id",SqlDbType.NVarChar,11));
sqlDeleteCommand1.Parameters["@Id"].Value=this.DataGrid1.DataKeys[(int)e.Item.ItemIndex];
sqlDeleteCommand1.Connection.Open();
try
{
sqlDeleteCommand1.ExecuteNonQuery(); }
finally
{
sqlDeleteCommand1.Connection.Close();
}
}
毛病:删除的时候得按两下,或者是可以删除前一个,却不能删除后一个。很混乱。我这代码写得对吗?

解决方案 »

  1.   

    sqlDeleteCommand1.Parameters["@Id"].Value=this.DataGrid1.DataKeys[(int)e.Item.ItemIndex];
    ----------------
    你应该通过主键来删除,而不是通过索引行
      

  2.   

    leafsword_519(一度的温暖):谢谢你的回复,我写的string str="DELETE from employee where e_id = @Id";这个e-id就是主键呀。如果我想通过主键来删除,这代码该怎么改呀!
      

  3.   

    如果你的datagrid中的第0列为主键列,,
    则程序改成:
    sqlDeleteCommand1.Parameters["@Id"].Value=e.item.cells(0).text.tostring;这样就行了,,,选中哪一行,不删除哪一行..
      

  4.   

    谢谢gezichong(鸽子虫)!sqlDeleteCommand1.Parameters["@Id"].Value=e.item.cells(0).text.tostring;我用了这句话之后,e.item下有红线,说它不可访问,因为有保护级别限制。我该改哪儿呀?
      

  5.   

    sqlDeleteCommand1.Parameters["@Id"].Value=this.DataGrid1.DataKeys[(int)e.Item.ItemIndex];
    这个是对得.你应该进入调试模式看看,哪些值跟你设计预想不一样.
      

  6.   

    this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString().Trim();
      

  7.   

    问题会不会是出现在try块中?
    当你不删除的时候可能是执行了下面这一句了:
    finally
    {
    sqlDeleteCommand1.Connection.Close();
    }
    建议检查数据的锁问题。
    个人意见。
      

  8.   

    改为:sqlDeleteCommand1.Parameters["@Id"].Value=e.Item.Cells[0].Text.Tostring;
    单元格的第1个是主键