3

我在 ASP.NET 中有一个 GridView,它带有一个 CheckBoxField 列,该列绑定到数据库中查询的 DataField。如果值为假,我需要能够检查它,如果值为真,则不检查。

这有点不标准,因为它完全倒退了大多数复选框控件的工作方式,但是有没有办法做到这一点?

4

1 回答 1

2

对此有多种方法。你可以试试这个:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        foreach (Control ctrl in e.Row.Cells[0].Controls)
        {
            if (ctrl.GetType().Name == "CheckBox")
            {
                CheckBox chk = (CheckBox)ctrl;
                chk.Checked = !chk.Checked;
            }
        }
    }
}

请记住在您的复选框字段所在的位置添加正确的单元格。

另一个是添加一个 TemplateField:

<asp:TemplateField>
    <ItemTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" 
            Checked='<%# !Convert.ToBoolean(Eval("Status")) %>' />
    </ItemTemplate>
</asp:TemplateField>

您还可以在从数据库服务器获取数据源后对其进行修改,因此如果您在其他地方以正常方式使用它,则无需修改查询。假设您有一件Generic List物品:

myItems.ForEach(item => item.Status = !item.Status);

额外的 jQuery 版本

<script>
    $(function () {
        $("#<%=GridView1.ClientID %> input[type='checkbox']").each(function () {
            $(this).prop("checked", !$(this).prop("checked"));
        });
    });
</script>
于 2013-03-28T17:54:23.850 回答