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>
答案 0 :(得分:2)
您需要在每次回发时重新创建网格内容(将网格重新绑定到数据源)。由于复选框单元格是动态生成的 - 必须在每次回发时重新创建,以使事件处理程序生效。
答案 1 :(得分:1)
你有关于GridView绑定的问题,每次绑定时都会删除你的事件。
你必须采用这种绑定行为
if(! IsPostBack)
{
Bind();
}
并使用EnableViewState=true
来保持您的gridview