我先在DataGrid中绑定了数据,可以把表中的数据正常显示出来。
之后,我在DataGrid中增加了一个删除列,想通过它来删除一条数据记录
因此,我在DataGrid1_DeleteCommand事件中写的代码如下:
private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.SelectedIndex=e.Item.ItemIndex;
string deleteCommand="delete from authors where au_id=@deleteAu_Id";
string constring=ConfigurationSettings.AppSettings["connectionString"];
SqlConnection myConnection=new SqlConnection(constring);
SqlCommand myCommand=new SqlCommand(deleteCommand,myConnection);
myCommand.Parameters.Add(new SqlParameter("@deleteAu_Id",SqlDbType.NVarChar,11));
myCommand.Parameters["@deleteAu_Id"].Value=DataGrid1.DataKeys[(int)e.Item.ItemIndex];
myConnection.Open();
try
{
myCommand.ExecuteNonQuery();
Response.Write("<script language=javascript>alter('数据记录已经成功删除')<script>");
}
catch(SqlException)
{
Response.Write("<script language=javascript>alter('错误:无法删除数据记录')<script>");
}
myConnection.Close();
DataGrid1.DataBind();
}
但是,在进行删除事件处理时,发生如下的错误:
“/WebAppForDataReadOnly”应用程序中的服务器错误。
索引超出范围。必须为非负值并小于集合大小。参数名: index
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index
源错误:
行 140: SqlCommand myCommand=new SqlCommand(deleteCommand,myConnection);
行 141: myCommand.Parameters.Add(new SqlParameter("@deleteAu_Id",SqlDbType.NVarChar,11));
行 142: myCommand.Parameters["@deleteAu_Id"].Value=DataGrid1.DataKeys[(int)e.Item.ItemIndex];
行 143: myConnection.Open();
行 144: try
源文件: c:\inetpub\wwwroot\webappfordatareadonly\webform1.aspx.cs 行: 142
堆栈跟踪:
[ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index]
System.Collections.ArrayList.get_Item(Int32 index) +91
System.Web.UI.WebControls.DataKeyCollection.get_Item(Int32 index)
WebAppForDataReadOnly.WebForm1.DataGrid1_DeleteCommand(Object source, DataGridCommandEventArgs e) in c:\inetpub\wwwroot\webappfordatareadonly\webform1.aspx.cs:142
System.Web.UI.WebControls.DataGrid.OnDeleteCommand(DataGridCommandEventArgs e)
System.Web.UI.WebControls.DataGrid.OnBubbleEvent(Object source, EventArgs e)
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
System.Web.UI.WebControls.DataGridItem.OnBubbleEvent(Object source, EventArgs e)
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args)
System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e)
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
System.Web.UI.Page.ProcessRequestMain()