【发布时间】:2016-01-26 15:48:11
【问题描述】:
我有一个显示列表的 GridView,用户可以为每个项目选择一个复选框。
例如,我检查第二行。我可以在数据库中看到该描述旁边的校验值已更新为 1:
但是当我回到 GridView 时,所有的复选框又是空白的。
GridView 的代码:
<asp:GridView style="width:75%"
ID="gvCVRTDetails"
ShowHeaderWhenEmpty="true"
CssClass="tblResults"
runat="server"
OnRowDataBound="gvCVRTDetails_RowDataBound"
DataKeyField="ID"
AutoGenerateColumns="false"
allowpaging="false"
AlternatingRowStyle-BackColor="#EEEEEE">
<HeaderStyle CssClass="tblResultsHeader" />
<Columns>
<asp:BoundField DataField="ChecklistID" HeaderText="ID" ></asp:BoundField>
<asp:BoundField DataField="Description" HeaderText="Checklist Items"></asp:BoundField>
<asp:TemplateField HeaderText ="Checked?" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:CheckBox ID="chkChecked" runat="server" ></asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
后面的代码:
protected void gvCVRTDetails_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
lookupCVRT work = (lookupCVRT)e.Row.DataItem;
GridView gv = sender as GridView;
e.Row.Attributes.Add("ID", "gvCVRTDetails_" + work.ID);
e.Row.Cells[0].Attributes.Add("onclick", "event.stopPropagation();");
CheckBox chkChecked = e.Row.FindControl("chkChecked") as CheckBox;
if(work.Checked)
{
chkChecked.Checked = true;
}
}
}
如果数据库中有 Checked 字段的值,我尝试设置 chkChecked.Checked = true;,但这不起作用。如果数据库中的值等于 1,如何使复选框显示为已勾选?
绑定网格:
protected void gridviewParent_SelectedIndexChanged(object sender, EventArgs e)
{
List<lookupCVRT> workDetails = lookupCVRT.GetChecklistItemsByChecklistID(Company.Current.CompanyID, ParentID.ToString(), gvCVRT.SelectedDataKey.Value.ToString());
gvCVRTDetails.DataSource = workDetails;
gvCVRTDetails.DataBind();
FireJavascriptCallback("setArgAndPostBack ();");
}
【问题讨论】:
-
这是一种将值绑定到 gridview 中的复选框的奇怪方法,但乍一看它通常看起来不错。你试过调试吗?
-
@Andrei 是的,我调试了它,它进入了 if 语句,但是当我查看 Grid 时,复选框仍然是空白的
-
@Andrei 我也尝试将
Checked='<%# Bind("Checked") %>'添加到网格中,但这也不起作用。有什么想法吗?
标签: c# asp.net gridview checkbox