我在DataGrid的模板列中添加了CheckBox控件,想在用户选择CheckBox的时候就触发CheckedChanged事件,但是这个事件总是触发不了。领导让我重写DataGrid控件,做成自定义控件,我还是解决不了。(我也用过在用户提交的过程中用FindControl方法了,但领导让我一个一个的触发CheckBox的事件,而不能在所有CheckBox控件选择完毕的时候再进行处理)请各位高手指点一下,怎样才能触发每个CheckBox的事件呢?

解决方案 »

  1.   

    DataGrid控件有个ItemDataBound的事件,在里面添加。
      

  2.   

    由于在模板列中,仅能允许少数几种控件直接设置commandname参数,而复选框并不在此列。如果以简单的方式处理,你可如下:
    在每个复选框后面,手工添加一个button,将它的commandname=Edit,然后,在后台代码中,将此按钮的样式设置为隐藏
    this.Button1.Style.Add("display","none"); 
    并且添加复选框的客户端事件
    for(int i=0;i<this.DataGrid1.Items.Count;i++)
    {
    Button mybut = (Button)this.DataGrid1.Items[i].FindControl("Button1");
    CheckBox mybox = (CheckBox)this.DataGrid1.Items[i].FindControl("CheckBox1");
    mybox.Attributes.Add("onclick","document.all(\"" + mybut.ClientID + "\").click();"); 
    }
    如此,当点击复选框时,即在客户端触发该行的隐藏按钮点击,就达到了目的。