public void MyDataGrid_Delete(Object sender,DataGridCommandEventArgs e)
{
string DeteleCmd = "delete from user_role where role_id=@role_id";
SqlCommand myCmd = new SqlCommand(DeteleCmd,myConn);
myCmd.Parameters.Add(new SqlParameter("@role_id",SqlDbType.Int));
myCmd.Parameters["@role_id"].Value = DG_role.DataKeyField[e.Item.ItemIndex];
myCmd.Connection.Open();
try
{
myCmd.ExecuteNonQuery();
LMessage.Text = "记录被删除!";
}
catch(SqlException)
{
LMessage.Text = "错误,不能删除!";
LMessage.Style["color"]= "red";
}
myCmd.Connection.Close();
BindGrid();
}“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------索引超出了数组界限。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: 索引超出了数组界限。源错误: 
行 40:  SqlCommand myCmd = new SqlCommand(DeteleCmd,myConn);
行 41:  myCmd.Parameters.Add(new SqlParameter("@role_id",SqlDbType.Int));
行 42:  myCmd.Parameters["@role_id"].Value = DG_role.DataKeyField[e.Item.ItemIndex];
行 43:  myCmd.Connection.Open();
行 44:  try
 
问题在42行,是怎么回事啊!!

解决方案 »

  1.   

    未设置DataGrid的DataKeyField;
    可以通过string tmp = DG_role.DataKeyField[e.Item.ItemIndex].ToString();
    myCmd.Parameters["@role_id"].Value = tmp;
    调试确认一下问题是否这个
      

  2.   

    myCmd.Parameters["@role_id"].Value = DG_role.DataKeyField[e.Item.ItemIndex].ToString();
                                                                               ↑↑↑↑↑
      

  3.   

    to  Eddie005(暴走005) 
    我按照你说的去做了,那个问题没有了,可是在执行sql语句时出现了
    输入字符串的格式不正确。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.FormatException: 输入字符串的格式不正确。源错误: 
    行 46:  try
    行 47:  {
    行 48:  myCmd.ExecuteNonQuery();
    行 49:  LMessage.Text = "记录被删除!";
    行 50:  }
     
      

  4.   

    to   Eddie005(暴走005) 我上面的索引是整型啊!!