如你所知,当你在数据库表中有很多元素时,你也有这个表与另一个表之间的关系(比如多对多),当你试图在动态数据中插入一个新项时,对于外键选项,您可以检查很多复选框。
例如,如果您有类别和产品并且想要插入新类别,那么您将拥有以下内容:
Product1 Product2 Product3 Product4
Product5 Product6 ...
当你的产品很少时它看起来不错,但是当你的产品超过5万时却没有。
如何在每个产品名称前面都有一个复选框的网格视图(我加载产品实体的地方)替换它们。如果我选中该复选框,则表示我想将该产品添加到此类别(我现在正在创建)。
希望你明白我想说的话。 我想创建一个自定义字段(或自定义字段的自定义页面),但我不知道如何制作该网格视图。
谢谢
答案 0 :(得分: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
}
不确定这是否是您正在寻找的,描述有点模糊
编辑:哦,如果您期望在Repeater中加载大量条目,您可以将其包装在AjaxControlToolkit可折叠面板中,这样它就不会在屏幕上显示垃圾邮件。