日期:2014-05-18  浏览次数:20477 次

为什么我的DataGrid的EditCommand方法不能编辑
我在一个webform窗体上放了一个datagrid控件,连上了数据库,放了一个编辑(更新,取消)按钮,然后在它的private   void   fixitemDBgrid_EditCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)方法中写代码,可是总是提示超出范围,我的代码是这样的:
fixitemDBgrid.EditItemIndex   =   e.Item.ItemIndex;
TextBox   tbfixcode   =   (TextBox)fixitemDBgrid.Items[fixitemDBgrid.EditItemIndex].Cells[0].Controls[0];

我的意图是让这一列为可编辑象TextBox那样可以修改,但是现在出错如果把出错的这行去掉,可以编辑,但却是只读的.这是为什么
出错信息如下:

指定的参数已超出有效值的范围。参数名:   index  
说明:   执行当前   Web   请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。  

异常详细信息:   System.ArgumentOutOfRangeException:   指定的参数已超出有效值的范围。参数名:   index

源错误:  


行   130: {
行   131: fixitemDBgrid.EditItemIndex   =   e.Item.ItemIndex;
行   132: TextBox   tbfixcode   =   (TextBox)fixitemDBgrid.Items[fixitemDBgrid.EditItemIndex].Cells[0].Controls[0];
行   133:
行   134: //NewTextBoxN.NewTextBox   Tbfixcode   =   (NewTextBoxN.NewTextBox   )e.Item.Cells[0].Controls[0];
 


------解决方案--------------------
TextBox tbfixcode = (TextBox)fixitemDBgrid.Items[fixitemDBgrid.EditItemIndex].Cells[0].Controls[0];
改成
TextBox tbfixcode=(TextBox)e.Item.FindControl( "你要找哪控件id ")
------解决方案--------------------
在EditCommand事件中这样写就行了
private void fixitemDBgrid_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
fixitemDBgrid.EditItemIndex = e.Item.ItemIndex;
//重新绑定数据
}

我的意图是让这一列为可编辑象TextBox那样可以修改,但是现在出错如果把出错的这行去掉,可以编辑,但却是只读的.
====================
看看你是不是在aspx文件中让它readonly = true了,还有,如果要进行编辑,是在UpdateCommand和DeleteCommand中写事件处理程序

------解决方案--------------------
TextBox tbfixcode = (TextBox)e.Items[fixitemDBgrid.EditItemIndex].Cells[0].Controls[0];
==========================
TextBox tbfixcode = (TextBox)e.Item.Cells[0].Controls[0];

Cells[0].Controls[0];第一个单元格的第一个控件