public void MyDataGrid_Edit(Object Sender, DataGridCommandEventArgs E)
{
   Button mybutton = (Button)E.Item.Cells[3].FindControl("UpdateButton");   //**看这句
   mybutton.Visible = true;   //**看这句
   MyDataGrid.EditItemIndex = E.Item.ItemIndex;
   DB();
}
-------------------------------------------------------------------------
UpdateButton这个Button是在DataGrid的模版里的,我起初将其Visible设为false,在触发MyDataGrid_Edit事件时将其Visible设为true,可却什么反应都没有。试着再设置其他属性时都没有反应,这是怎么回事呢?我可以保证这一句没有出错:(Button)E.Item.Cells[3].FindControl("UpdateButton");

解决方案 »

  1.   

    如果你敢肯定:(Button)E.Item.Cells[3].FindControl("UpdateButton");没错的话。就逐个执行每一行代码。   MyDataGrid.EditItemIndex = E.Item.ItemIndex;
       DB();先注释了。。看看触发MyDataGrid_Edit事件后能不能设置按纽属性。如果可以,那就是你绑定数据时的问题了。
      

  2.   

    Button mybutton = (Button)E.Item.Cells[3].FindControl("UpdateButton");   //**看这句
    上面这句应该错了,正确写法应该是:
    Button mybutton = ((Button)E.Item.Cells[3]).FindControl("UpdateButton"); 还有,最好是写在DataGrid_ItemDataBound等事件中。  
      

  3.   

    刚才说错了,Button mybutton = (Button)E.Item.Cells[3].FindControl("UpdateButton");没有错,要是要用到Button的方法的时候就应该再加一对括号,不好意思,没看清。建议还是将其写到先于EditCommand事件执行的事件中。
      

  4.   

    个人认为,如果真的如你所说“没有任何反应”且“(Button)E.Item.Cells[3].FindControl("UpdateButton")”没有错的话,你还是先确定事件的关联是否还存在再者可试一下(Button)E.Item.FindControl("UpdateButton")不过,综上,应该是事件没有关联上才对
      

  5.   

    你说UpdateButton这个Button是在DataGrid的模版里的,那它是ItemTemplate里的,还是EditItemTemplate里的?
    你单击了Edit按钮以后,选中行中就应该是EditItemTemplate里的的控件,你跟踪执行一下试试,执行了Button mybutton = (Button)E.Item.Cells[3].FindControl("UpdateButton");  这句以后,mybutton应该还是NULL,
    所以我建议你改一下模板列,把要显示的button放到EditItemTemplate中,然后调整一下你这几句的执行次序。
      

  6.   

    放到ItemCreate里面试试:if(e.Item.ItemType==ListItemType.EditItem)
    {
    Button mybutton = (Button)E.Item.Cells[3].FindControl("UpdateButton");      mybutton.Visible = true;   
    }
      

  7.   

    成功了!其他方法我不太懂,受haitoo(haitoo)的启发,我把UpdateButton放进<EditItemTemplate>模版里,其他什么都没有改就行了。