【问题标题】:Can't bind checkboxes in Gridview无法在 Gridview 中绑定复选框
【发布时间】: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='&lt;%# Bind("Checked") %&gt;' 添加到网格中,但这也不起作用。有什么想法吗?

标签: c# asp.net gridview checkbox


【解决方案1】:

您应该将复选框绑定到您从 db 读取的属性,例如:

     <asp:TemplateField HeaderText ="Checked?" ItemStyle-HorizontalAlign="Center">
              <ItemTemplate>
              <asp:CheckBox ID="chkChecked"  Checked='<%# Bind("YourCheckPropertyFromModel") %>'runat="server" ></asp:CheckBox>
              </ItemTemplate>
     </asp:TemplateField>

【讨论】:

  • 我也试过Checked='&lt;%#bool.Parse(Eval("Checked").ToString())%&gt;',但也没有用
  • 对此有何其他想法?我仍然无法让它工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-07
  • 2019-09-04
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多