datagrid的编辑时遇到的问题。更新的时候,代码是这样的: 
SqlConnection cn= new SqlConnection (MyConnString);
cn.Open ();
string upStr="UPDATE data SET 资料编号=@资料编号,提供人=@提供人,资料载体=@资料载体,分类密级=@分类密级,资料说明=@资料说明 WHERE 资料名称=@资料名称";
SqlCommand upCmd=new SqlCommand(upStr,cn);
upCmd.Parameters.Add("@资料编号",SqlDbType.NVarChar,50);
upCmd.Parameters.Add("@提供人",SqlDbType.Char,10); 
upCmd.Parameters.Add("@资料载体",SqlDbType.Char,10); 
upCmd.Parameters.Add("@分类密级",SqlDbType.SmallInt,2); 
upCmd.Parameters.Add("@资料说明",SqlDbType.NVarChar,1000); 
upCmd.Parameters.Add("@资料名称",SqlDbType.NVarChar,50); 
if(e.Item.ItemType==ListItemType.EditItem)
{
this.Label1.Text=((TextBox) e.Item.Cells[2].Controls[0]).Text.ToString(); 

运行提示说:指定的参数已超出有效值的范围,参数名:index 本没有那个if(e.Item.ItemType==ListItemType.EditItem)
语句,但从网上找到一个帖子说是需要if一下,加上后一开始是好的,可是现在又不对了。。奇怪不知道怎么搞的。。哪位高手能帮我看一下么。谢谢!

解决方案 »

  1.   

    设置断点,看看能否取到值
    this.Label1.Text=((TextBox) e.Item.Cells[2].Controls[0]).Text.ToString(); 
      

  2.   

    this.Label1.Text=((TextBox) e.Item.Cells[2].Controls[0]).Text.ToString(); 
    是不是变换了DataGrid的列顺序或,删除了某一列,Cells[2]已经不存在了
      

  3.   

    没有指定传递的参数值
    upCmd.Parameters[0].Value =((TextBox) e.Item.Cells[2].Controls[0]).Text.ToString(); 
    upCmd.Parameters[1].Value = ...
      

  4.   

    看了你的程序感觉有点奇怪,不知道你是用存储过程,还是用SQL语句
    如果用SQL语句:
    SqlConnection cn= new SqlConnection (MyConnString);
    cn.Open ();
    string upStr="UPDATE data SET 资料编号=@资料编号,提供人=@提供人,资料载体=@资料载体,分类密级=@分类密级,资料说明=@资料说明 WHERE 资料名称=@资料名称";
    SqlCommand upCmd=new SqlCommand(upStr,cn);
    upCmd.CommandType = sqltext;
    cmd的执行就可以了 
    如果你用的存储过程:
    upCmd.Parameters.Add("@资料编号",SqlDbType.NVarChar,50);
    upCmd.Parameters.Add("@提供人",SqlDbType.Char,10); 
    upCmd.Parameters.Add("@资料载体",SqlDbType.Char,10); 
    upCmd.Parameters.Add("@分类密级",SqlDbType.SmallInt,2); 
    upCmd.Parameters.Add("@资料说明",SqlDbType.NVarChar,1000); 
    upCmd.Parameters.Add("@资料名称",SqlDbType.NVarChar,50); 传入存储过程名,传入参数,然后根据返回值判断执行情况
    即可。                                           桂林电子科技大学计算机系
                                                 信息管理与信息系统
                                                    2006.4.26
      

  5.   

    非常感谢各位的热心支持。xingyangt(信仰t),我是设置了主键,可是并没有改变主键的内容啊,会有什么影响么?knight94(愚翁),private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e){},我是在这个事件里写的。songxiaozhao(雨朋),我也断点跟踪过,看不出来。。fellowcheng(浮云一小朵),换了一列this.Label1.Text=((TextBox) e.Item.Cells[0].Controls[0]).Text.ToString(); 还是不行。。liusujian02(刘阿建),我是用SQL语句的。其实我也不知道该怎么规范程序,程序是仿照网上一个例子写的。例子里面用的都是SQL语句。。现在问题依然存在。请个位大虾再帮我出出注意,谢谢了!
      

  6.   

    现在上一个问题解决了。原因是我在datagrid的“属性生成器”中把Cells[2]设置成了只读。。所以会出现“指定的参数已超出有效值的范围,参数名:index ”这个问题。还是感谢大家的热心帮助!!现在又出现的问题是:无论我在表格里添如什么。点“更新”按钮后都没有更新,而还是以前的数据。请大家给我一些提示可以吗?我也继续检查,之后一起结贴好吗?
      

  7.   

    datagrid的UPDATE默认是在ROWCHANGE或LOSEFOCUS时发生的...
      

  8.   

    vshake(冰壁迷宫),更新在这里写:private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e),不可以么。我看到例子里面都是这么做的呀。
    按照你说的。该怎么改一下呢?