【问题标题】:Replace checkboxes in Dynamic Data with gridview用 gridview 替换动态数据中的复选框
【发布时间】:2012-12-11 14:40:54
【问题描述】:

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

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

 Product1    Product2   Product3   Product4
 Product5    Product6   ...

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

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

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

谢谢

【问题讨论】:

    标签: c# asp.net entity-framework dynamic-data


    【解决方案1】:

    你做一个 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 可折叠面板中,这样它就不会在您的屏幕上显示垃圾信息。

    【讨论】:

    • 其实回过头来看我写的东西,CheckBoxList控件会比Repeater简单
    • 是的。类似的东西,但是我如何将产品加载到该网格视图?
    • @user1607079 只需设置您的 gvMyGrid.DataSource = myObj;然后 gvMyGrid.DataBind();您绑定的对象只需具有与您要拉出的字段匹配的属性,中继器也是如此
    • 好的。谢谢你。我会试试的
    猜你喜欢
    • 2011-08-07
    • 2015-01-11
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 2015-04-11
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多