2012-07-27 89 views
0

我用这个代码创建了我的gridview,里面有复选框。我在gridview上的复选框不会触发事件

<asp:GridView ID="GridView1" runat="server" Width="366px" autogeneratecolumn="false"> 
     <Columns> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        <asp:CheckBox ID="SelectAllCheckBox" runat="server" AutoPostBack="true" oncheckedchanged="SelectAllCheckBox_OnCheckedChanged" /> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <asp:CheckBox ID="EachCheckBox" runat="server" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

我试过检查/取消选中它。 enter link description here

protected void SelectAllCheckBox_OnCheckedChanged(object sender, EventArgs e) 
    { 
     String test = "test"; 
     test = "newtest"; 
     GridView1.DataSource = null; 
     GridView1.DataBind(); 
    } 

但它不会触发任何事件。 enter link description here

我想找到我的代码丢失和搜索到目前为止,但仍然不能。

谢谢你的帮助!

+0

你的代码是确定的,为我工作。你可以发表你填写'GridView1'的方式吗?如果它在每次回发时被重新填充 - 它将阻止处理“CheckedChanged”事件。 – Andrei 2012-07-27 15:15:20

回答

0

必须使用OnItemCreated或OnItemDataBound,并与委托

void Item_Created(Object sender, DataGridItemEventArgs e) 
    { 

     CheckBox cbx = (CheckBox)e.Item.FindControl("SelectAllCheckBox"); 
     cbx.CheckedChanged += SelectAllCheckBox_OnCheckedChanged; 

    } 
0

代码看起来很好,对我的作品链接你的复选框。

我怀疑你可能在每次回发时都绑定GridView。

当您单击带附加事件的复选框时,它会导致页面刷新。如果您将Page_Load上的复选框(或每次出现在服务器上的任何方法)绑定,则每次单击复选框时它都会绑定网格。在这种情况下,它永远不会发射你的事件。

如果是这样,请尝试检查绑定您的GridView之前的回发。

例如:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     Gridview1.DataSource = myDataSource; 
     GridView1.DataBind(); 
    } 
}