2012-07-27 87 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(); 
    } 
}