用gridview中的条件填充行

时间:2013-01-20 15:39:41

标签: c# asp.net linq rowdatabound

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

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

1 个答案:

答案 0 :(得分: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仅用于生成一些演示数据,重点在于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;
    }

所以最终结果看起来像这样: enter image description here

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

快乐的编码!