第一个问题:以前用VB.NET写过一个B/S结构的MIS系统,在DATAGRID编辑状态下的UpdateCommand事件中,通过声明一个TextBox对象变量,然后等于e.Item.Cells[i].Controls[0]取到这个TextBox对象,就可以取到对某一列修改后的值,即TextBox的值.但现在在C#中怎么也搞不定,问题是在编辑状态下,不论我怎么修改TextBox对像的内容,后台取到的还是该列的原值,高手指教?
private void dgSpSort1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
//更新
TextBox txtTemp;

for(int i=3;i<e.Item.Cells.Count;i++)
{
txtTemp=(TextBox)e.Item.Cells[i].Controls[0]; this.dsSpSort.Tables["SpSort1"].Rows[e.Item.ItemIndex][i-2]=txtTemp.Text;
}
this.OraDataAdapter.Update(dsSpSort,"SpSort1");
this.dgSpSort1.EditItemIndex=-1;
this.dgSpSort1.DataBind();

}第二个问题:
就是DataGrid中点击删除按钮的确认问题,以前在VB.net中同样的方式没有一点问题,但现在在C#中就是不提示,高手再指教,代码如下:
private void dgSpSort1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
//删除
dsSpSort.Tables["SpSort1"].Rows[e.Item.ItemIndex].Delete();

this.OraDataAdapter.Update(dsSpSort,"SpSort1");
this.dgSpSort1.DataBind();}private void dgSpSort1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.Item.ItemIndex>=0)
{
LinkButton btnDel;
btnDel=(LinkButton)e.Item.Cells[1].Controls[0];
btnDel.Attributes.Add("onClick","JavaScript:return confirm('确认删除该记录?');");
}
}

解决方案 »

  1.   

    郁闷,第一个问题,创建模板列然后用FindControl也不行
      

  2.   

    第一个问题:
    断点跟踪了吗?不是IsPostBack 的问题吧?
    for(int i=3;i<e.Item.Cells.Count;i++)
    {
                      TextBox txtTemp = new TextBox();
    txtTemp=(TextBox)e.Item.Cells[i].Controls[0]; this.dsSpSort.Tables["SpSort1"].Rows[e.Item.ItemIndex][i-2]=txtTemp.Text;
    }
      

  3.   

    2。
    private void dgBankAccount_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {LinkButton btn=(LinkButton)e.Item.Cells[4].Controls[0];
    if(btn != null)
    {
    btn.Attributes.Add ("onclick",
    "return confirm (\"确定要删除此项记录吗?\");");
    }}
    -----------
    ItemDataBound事件。
      

  4.   

    谢adandelion(猪头),第二个问题解决了,是应该写到ItemDataBound事件中第一个问题的事件是执行了,我都跟踪了,查看监视值时取到的是修改前的原值?
      

  5.   

    第一个问题:确定在update执行之前,你没有重新帮定数据源
      

  6.   

    第一个问题的事件是执行了,我都跟踪了,查看监视值时取到的是修改前的原值?
    ----------------------
     allen_cn(波波) 
    第一个问题:确定在update执行之前,你没有重新帮定数据源
    他说地对.
      

  7.   

    private void dgSpSort_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    //更新
    TextBox txtTemp; this.BindGrid(); for(int i=3;i<e.Item.Cells.Count;i++)
    {
    txtTemp=(TextBox)e.Item.Cells[i].Controls[0];

    dsSpSort.Tables["SpSort1"].Rows[e.Item.ItemIndex][i-2]=txtTemp.Text;
    }
    OraDataAdapter.Update(dsSpSort,"SpSort1");
    this.dgSpSort.EditItemIndex=-1;
    this.BindGrid();

    }我重新修改了UpdateCommand事件中的代码,在该事件中先执行了一下数据绑定,可以了,奇怪,我以前用Vb.net写的时候好像没有这样做绑定啊,只是在EditCommand中做了一下绑定,然后就直接在UpdateCommand中就直接取值修改了???
      

  8.   

    我又再次遇到了这个问题,应该还不是绑定的问题,我重新建了一个项目专门测试该问题,UpdateCommand中没有绑定,就可以取到值,后来我又把我原来的页面删掉,重写了,又可以取到了,真是郁闷!!!