0

如您所知,当您在数据库表中有很多元素并且该表与另一个表之间也存在关系(比如说多对多)时,当您尝试在动态数据中插入新项目时,对于外键选项你有很多可以检查的复选框。

例如,如果您有 Category 和 Products,并且您想插入一个新 Category,您将拥有如下内容:

 Product1    Product2   Product3   Product4
 Product5    Product6   ...

当您的产品很少时,它看起来不错,但是当您拥有超过 50 000 个时,它就不行了。

如何用每个产品名称前有一个复选框的网格视图(我加载产品实体的位置)替换它们。如果我选中该复选框,则意味着我想将该产品添加到此类别(我正在创建的那个类别)。

希望你明白我想说什么。我正在考虑制作一个自定义字段(或带有自定义字段的自定义页面),但我不知道如何制作该网格视图。

谢谢

4

1 回答 1

0

你如何制作一个Gridview:

    <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 回答