データバインディングを使用してこれを行う方法を簡略化したサンプルを用意しました。
最初の 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;
}
したがって、最終結果は次のようになります。
最初の行のチェックボックスが有効になり、2 番目の行が無効になります。
ハッピーコーディング!