我需要使用 linq 评估数据库中的条件,以便每行的复选框启用或不启用,我认为可以使用RowDataBound
orCreateRow
事件来完成。
即,我有一个gridview,其中有几列填充有来自linq 的数据源。在所有这些列中,其中两个各有一个复选框,因此如果来自基数的记录等于 1,则仅启用具有该行复选框的 column2,如果不等于 1,则保持原样。
我需要使用 linq 评估数据库中的条件,以便每行的复选框启用或不启用,我认为可以使用RowDataBound
orCreateRow
事件来完成。
即,我有一个gridview,其中有几列填充有来自linq 的数据源。在所有这些列中,其中两个各有一个复选框,因此如果来自基数的记录等于 1,则仅启用具有该行复选框的 column2,如果不等于 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;
}
所以最终结果将如下所示:
第一行复选框被启用,第二行被禁用。
快乐编码!