2012-08-07 22 views
0

VS2010asp.net复选框从不调用方法

您好,我有一个网页,其中包含从数据库填充的gridview。其中一个字段是复选框。我试图做的是点击复选框时更新数据库中的值。不过,我在gvSiteInfo_CheckBoxUpdate()方法中有一个断点,它永远不会到达。

你能指出我正确的方向来让这个工作正常吗?我在网上找到的几个例子似乎与我的一样。

下面是我的标记的缩写版本。

<asp:GridView ID="gvSiteInfo" runat="server" 
    AutoGenerateColumns="False" OnSorting="gvSiteInfo_Sorting" 
    AllowSorting="True"> 
    <AlternatingRowStyle BackColor="#DCDCDC" /> 
    <Columns> 
     <asp:BoundField DataField="prodHostHeader" HeaderText="Production Host Header" 
      SortExpression="prodHostHeader" /> 
     <asp:BoundField DataField="prodDirectory" HeaderText="Production Directory" 
      SortExpression="prodDirectory" /> 
     <asp:BoundField HeaderText="Active Issues" DataField="issueCount" 
      SortExpression="issueCount" /> 
     <asp:TemplateField HeaderText="Testing Complete" SortExpression="true"> 
      <ItemTemplate> 
       <asp:CheckBox ID="cbTestComplete" runat="server" CausesValidation="true" AutoPostBack="true" OnCheckedChanged="gvSiteInfo_CheckBoxUpdate" 
       Checked='<%# DataBinder.Eval(Container, "DataItem.testComplete").ToString().Equals("true") %>' /> 
      </ItemTemplate> 
      <EditItemTemplate> 
       <asp:CheckBox ID="cbTestComplete" runat="server" CausesValidation="true" AutoPostBack="true" OnCheckedChanged="gvSiteInfo_CheckBoxUpdate" 
        Checked='<%# DataBinder.Eval(Container, "DataItem.testComplete").ToString().Equals("true") %>' />    
      </EditItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

这里是一个应该被称为

public void gvSiteInfo_CheckBoxUpdate(object sender, EventArgs e) 
{ 
     SiteDB dbAccess = new SiteDB(); 
     dbAccess.updateSiteInfo(); 
} 

---------------编辑代码------------ ----------------- 这里是我的Page_Load代码

protected void Page_Load(object sender, EventArgs e){ 
     SiteDB dataAccess = new SiteDB(); 
     dataAccess.SelectedConnectionString = "WISQL01"; 

     DataTable dt = dataAccess.getSiteInfo(); 

     gvSiteInfo.DataSource = dt; 
     gvSiteInfo.DataBind(); 
    } 

------------- UPDATE ------ ----------------------

added CausesValidation="true" to <asp:checkbox>

回答

1

您有关于绑定GridView的问题,当您每次绑定时,都会清除事件。

你必须采取的结合

if(! IsPostBack) 
{ 
    Bind(); 
} 

此行为,使用EnableViewState=true为了坚持你的GridView

+0

对于我的gridview,EnableViewState被设置为true,如果你看上面我加了我的Page_Load代码,并且我相信每次页面重新加载时我都会重新绑定。 – Mike 2012-08-07 19:14:57

+0

完美迈克我认为所以你必须调整你的生命周期 – 2012-08-07 19:16:07

+0

谢谢,但我不知道你的意思是通过调整我的生命周期。是否有我需要更改的gridview或复选框的属性? – Mike 2012-08-07 19:26:59

2

您需要重新网格内容(重新绑定网格到数据源)上的每个回发。由于复选框单元格是动态生成的 - 必须在每次回发时重新创建,以便事件处理函数生效。

+0

我认为我重新绑定每个回发。我已编辑我的问题,包括我的页面加载代码,这是我绑定数据的地方。 – Mike 2012-08-07 19:12:30