0

データベーステーブルに多くの要素があり、このテーブルと別のテーブルの間に関係がある場合(たとえば、多対多)、動的データに新しいアイテムを挿入しようとしている場合は、外部キーオプションには、チェックできるチェックボックスがたくさんあります。

たとえば、カテゴリと製品があり、新しいカテゴリを挿入する場合は、次のようになります。

 Product1    Product2   Product3   Product4
 Product5    Product6   ...

製品が少ない場合は見栄えが良くなりますが、50000を超える場合はそうではありません。

すべての製品名の前にチェックボックスがあるグリッドビュー(製品エンティティをロードする場所)に置き換えるにはどうすればよいですか?このチェックボックスをオンにすると、その製品をこのカテゴリに追加することを意味します(この時点で作成しています)。

私が言おうとしていることをご理解いただければ幸いです。カスタムフィールド(またはカスタムフィールドを含むカスタムページ)を作成することを考えていますが、そのグリッドビューを作成する方法がわかりません。

ありがとうございました

4

1 に答える 1

0

グリッドビューを作成するのはどうですか。

    <asp:GridView runat="server" ID="gvMyGrid">
         <Columns>
            <asp:BoundField DataField="MyField" HeaderText="HeaderForMyField />
            ... You have a few of these 
             <asp:TemplateField HeaderText="Products">
                  <ItemTemplate>
                         <asp:Repeater runat="server" id="rptListOfProducts" OnItemDataBound="ProductsDataBound">
                             <ItemTemplate>
                                  <asp:HiddenField id="hfProductId" runat="server"
                                        Value='<%# DataBinder.Eval(Container.DataItem, "ProductId") %>'/>
                                  <asp:CheckBox id="cbProduct" runat="Server" 
                                      Text='<%# DataBinder.Eval(Container.DataItem, "ProductName") %>'
                                      Checked='<%# DataBinder.Eval(Container.DataItem, "IsThisProductSelected") %>' />  //Or some kind of flag that is true or false
                             </ItemTemplate>
                         </asp:Repeater>
                  </ItemTemplate>
         </Columns>
    </asp:GridView>

次に、C#コードで、このようなものを使用して、ユーザーが何を変更したかを調べることができます。

    foreach (Control c in rptMonitors.Items)
    {
             var productId = int.Parse(((HiddenField)c.FindControl("hfProductId")).Value);
             //And get the check box too, generate a list of ProductIds, and if they're checked or not
    }

これがあなたが探しているものであるかどうかわからない、説明は少し曖昧でした

編集:ああ、リピーターに大量のエントリが予想される場合は、AjaxControlToolkit折りたたみパネルでラップして、画面にスパムを送信しないようにすることができます。

于 2012-12-11T15:52:50.930 に答える