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