【问题标题】:asp .net displaying a grouped list of itemsasp .net 显示项目的分组列表
【发布时间】:2015-09-10 00:40:13
【问题描述】:

我将调用一个网络服务,该网络服务将以这种格式返回数据。

<element>
    <label>Some Text</label>
    <items>
      <item>1</item>
    <items>
</element>
<element>
    <label>Some Text 2</label>
    <items>
      <item>google</item>
      <item>mac</item>
      <item>bus</item>
    <items>
</element>
<element>
    <label>Some Text 3</label>
    <items>
      <item>OS</item>
      <item>Brush</item>
    <items>
</element>

现在在我的 asp .net 网络表单页面上,对于每个元素我需要显示一个包含两列的表格,左列将包含标签文本(例如一些文本)。但是右列需要包含复选框,并且复选框的数量将等于每个元素中的项目数。然后每个元素都会有一个保存按钮。基本上这个想法是用户可以取消选择该项目。例如:对于第二个项目,用户界面应该如下所示:

但当然可以有 100 多个项目。那么在 asp .net 网络表单中最好的方法是什么?我想到了以下几点:

在后面的代码中动态创建控件,并根据 Web 服务的响应不断添加它们。还有其他方法吗?

谢谢。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    你可以像这样使用ListView

    aspx 标记:

    <asp:ListView runat="server" ID="myListview" OnItemDataBound="listview_ItemDataBound">
        <ItemTemplate>
            <div style="overflow: auto;clear: both;">
                <div style="float: left; clear: both;">
                    <%#Eval("LabelText") %>
                </div>
                <div style="float: left">
                    <asp:CheckBoxList runat="server" RepeatColumns="3" ID="cblItems" />
                    <asp:Button Text="Button" runat="server" />
                </div>
            </div>
        </ItemTemplate>
    </asp:ListView>
    

    代码背后

    // Assuming your service will return [element] types
    class element
    {
        public string LabelText { get; set; }
        public List<string> Items { get; set; }
    }
    
    public partial class WebForm4 : System.Web.UI.Page
    {
        private static Random RNG = new Random(DateTime.Now.Millisecond);
        protected void Page_Load(object sender, EventArgs e)
        {
            PopulateData();
        }
    
        private void PopulateData()
        {
            // Pseudo service data
            var serviceData = Enumerable.Range(1, 10).Select(i => new element
            {
                LabelText = "Some Text " + i,
                Items = Enumerable.Range(1, RNG.Next(3, 12)).Select(j => " Item " + j).ToList()
            });
    
            myListview.DataSource = serviceData;
            myListview.DataBind();
        }
    
        protected void listview_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
    
            if(e.Item.ItemType == ListViewItemType.DataItem)
            {
                var dataItem = e.Item.DataItem as element;
                var cbl = e.Item.FindControl("cblItems") as CheckBoxList;
                cbl.DataSource = dataItem.Items;
                cbl.DataBind();
            }
        }
    }
    

    【讨论】:

    • 还有一个问题,当相应的按钮被按下时,如何获取选择了哪些文本框的信息?我可以使用事件处理程序找到按钮。但我不想为复选框设置任何事件处理程序。
    • 在这种情况下,您需要为ItemCommand 事件创建一个处理程序。然后就可以获取行,找到checkboxlsit控件,获取选中的内容。
    • 谢谢,是的。必须进行大量调试才能通过它。
    【解决方案2】:

    在 ASP.NET Web 表单中,添加动态内容的常规方法是在请求的 Page_Init 或 Page_Load 阶段向页面添加控件。您还可以在客户端进行 Web 服务调用,或者创建将调用 XML 服务并以 JSON 响应的翻译服务。

    有许多可以显示数据的 jQuery 插件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 2015-10-04
      相关资源
      最近更新 更多