0

我需要使用 linq 评估数据库中的条件,以便每行的复选框启用或不启用,我认为可以使用RowDataBoundorCreateRow事件来完成。

即,我有一个gridview,其中有几列填充有来自linq 的数据源。在所有这些列中,其中两个各有一个复选框,因此如果来自基数的记录等于 1,则仅启用具有该行复选框的 column2,如果不等于 1,则保持原样。

4

1 回答 1

1

我已经为您准备了如何使用数据绑定来完成此操作的简化示例。

第一个 aspx 代码,注意我使用了 ValidateRecord 来验证单个记录:

    <asp:GridView ID="GridView1" runat="server" DataKeyNames="Id" DataSourceID="ObjectDataSource1" AutoGenerateColumns="true">
        <Columns>
            <asp:TemplateField HeaderText="Check">
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" Enabled='<%# ValidateRecord(Eval("RowState")) %>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetItems" TypeName="WebTester.DataGridTester">
    </asp:ObjectDataSource>

现在结束后面的代码。GetItems只是用来生成一些demo数据,重点在ValidateRecord里面:

    public bool ValidateRecord(object value)
    { 
        return (value as int?) == 1;
    }

    public static DataTable GetItems()
    { 
        //generate some demo data...
        DataTable dt = new DataTable();
        dt.Columns.Add("RowState", typeof(int?));
        dt.Columns.Add("Id",typeof(int));
        dt.Columns.Add("col1", typeof(string));
        dt.Columns.Add("col2", typeof(string));
        dt.Columns.Add("col3", typeof(string));
        dt.Columns.Add("col4", typeof(string));
        dt.Columns.Add("col5", typeof(string));
        dt.Columns.Add("col6", typeof(string));
        dt.Columns.Add("col7", typeof(string));
        dt.Rows.Add(new object[] {1, 1,"some","data","in","first","row", ".", ".." });
        dt.Rows.Add(new object[] {0, 2, "second", "record", "inside", "demo", "datatable", "-", "--" });
        return dt;
    }

所以最终结果将如下所示: 在此处输入图像描述

第一行复选框被启用,第二行被禁用。

快乐编码!

于 2013-01-20T18:54:51.467 回答