0

各行のチェックボックスが有効または無効になるように、linqを使用してデータベースから条件を評価する必要があります。RowDataBoundまたはCreateRowイベントを使用して実行できると思います。

つまり、linq からのデータソースで満たされたいくつかの列を持つグリッドビューがあります。これらすべての列のうち、2 つの列にはそれぞれチェックボックスがあるため、ベースからのレコードが 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 は、いくつかのデモ データを生成するためだけに使用されます。ポイントは 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 番目の行が無効になります。

ハッピーコーディング!

于 2013-01-20T18:54:51.467 に答える