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

时间:2012-08-07 19:02:58

标签: asp.net checkbox

VS2010

您好,我有一个网页,其中包含从数据库填充的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();
}

--------------- EDIT ----------------------------- 这是我的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 ----------------------------

CausesValidation="true"添加到<asp:checkbox>

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

你有关于GridView绑定的问题,每次绑定时都会删除你的事件。

你必须采用这种绑定行为

if(! IsPostBack)
{
  Bind();
}

并使用EnableViewState=true来保持您的gridview