【问题标题】:dynamically create multiple ListBoxes动态创建多个 ListBox
【发布时间】:2011-05-24 20:34:41
【问题描述】:

我在 SQL Server 中有一个表,它为我提供了产品列表 (PRODUCT) 和产品类别 (CAT)。现在我将所有产品放在同一个 ListBox 中:

foreach(ds.Tables["ProductsTbl"].Rows 中的 DataRow 行) { string str = string.Format("{0}", row["PRODUCT"]); ListBox1.Items.Add(new ListItem(str)); }

但我需要创建与类别一样多的列表框,并根据类别分配这些产品。可能会添加或删除类别,因此我需要动态创建它们。

假设表格有 5 个类别 1 的产品、4 个类别 2 的产品和 7 个类别 3 的产品,我需要创建 3 个列表框。第一个有 5 个项目,第二个有 4 个项目,最后一个有 7 个项目。有任何想法吗 ? 谢谢。

【问题讨论】:

    标签: c# asp.net listbox


    【解决方案1】:
    1. 订购ProductsTbl DataSet by categoryId
    2. 每次遇到新的categoryId时添加一个新的列表框

    类似这样的:

    var catId = ds.Tables["ProductsTbl"].Rows[0].categoryId;
    var listBox = ListBox1;
    foreach (DataRow row in ds.Tables["ProductsTbl"].Rows)
    {
        if(catId != row.categoryId)
        {
            catId = row.categoryId;
            listBox = new ListBox();
            Panel1.Controls.Add(listBox);
        } 
        string str = string.Format("{0}", row["PRODUCT"]);
        listBox.Items.Add(new ListItem(str));
    }
    

    【讨论】:

    • 看起来不错,但我能在那些动态创建的控件上触发事件吗?例如,对于每个 ListBox,我都会有一个“全选”和“取消全选”按钮。
    • 是的 - 对于服务器事件,请查看此链接 support.microsoft.com/kb/317794。对于客户端事件,您可以使用 jquery live 函数。它将响应动态创建的元素。看到这个链接api.jquery.com/live
    【解决方案2】:

    您甚至可以创建一个控件,使您能够调整外观,然后创建它的新实例,就像 Josia 的代码一样。

    http://knol.google.com/k/creating-custom-controls-with-c-net#

    以上是自定义控件的示例

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多