乐教押题是真的吗:ASP.NET DataGrid 更新数据问题

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/25 21:34:12
DataGrid 更新数据时出错,语句如下:

private void DataGrid1_UpdateCommand(object source, DataGridCommandEventArgs e)
{
string strCn = ConfigurationSettings.AppSettings["connstring"];
OleDbConnection Cn = new OleDbConnection(strCn);
string upSQL = "update UserTable set Pass=@Pass, where ID=@ID";
OleDbCommand upCmd = new OleDbCommand(upSQL,Cn);

upCmd.Parameters.Add("@ID",OleDbType.SmallInt,4);
upCmd.Parameters.Add("@Pass",OleDbType.VarChar,50);
upCmd.Parameters["@ID"].Value = DataGrid1.DataKeys[e.Item.ItemIndex];
upCmd.Parameters["@Pass"].Value = ((TextBox) e.Item.Cells[3].Controls[0]).Text;

try
{
Cn.Open();
upCmd.ExecuteNonQuery();
Cn.Close();
if(!Page.IsStartupScriptRegistered("upAlert"))
{
Page.RegisterStartupScript("upAlert",@"<script language='javascript'>alert('更新成功')</script>");
}
this.DataGrid1.EditItemIndex = -1;
BindGrid();
}
catch(Exception err)
{
Response.Write(err.Message);
}
finally
{
if(Cn.State == ConnectionState.Open)
{
Cn.Close();
}
}

出错语句:upCmd.Parameters["@ID"].Value = DataGrid1.DataKeys[e.Item.ItemIndex];
提示:索引超出范围。必须为非负值并小于集合大小。参数名: index
请问是哪里出错呢?方便的话请留个MSN联系方式,谢谢

用于OleDb的.net数据库组件不支持@,使用问号代替你的参数,写成这样:
string upSQL = "update UserTable set Pass=?, where ID=?";
upCmd.Parameters.Add("ID",OleDbType.SmallInt,4);
upCmd.Parameters.Add("Pass",OleDbType.VarChar,50);
upCmd.Parameters["ID"].Value = DataGrid1.DataKeys[e.Item.ItemIndex];
upCmd.Parameters["Pass"].Value = ((TextBox) e.Item.Cells[3].Controls[0]).Text;

开始绑定的时候要这样

DataGrid1.DataSource=conn.allset("select * from admin");
DataGrid1.DataKeyField="id";
DataGrid1.DataBind();
特别是这个DataGrid1.DataKeyField="id";