【问题标题】:Reading selected ITEMS from Dynamically Created ListBox in asp.net从 asp.net 中动态创建的 ListBox 中读取选定的项目
【发布时间】:2012-11-30 07:38:59
【问题描述】:

我在面板中动态创建了 ListBox,我想从动态创建的 Listbox 中读取所选项目。下面是我用来创建动态列表框的代码。谁能帮助我如何获取动态创建的列表框,然后阅读所选项目。 '受保护的无效GotoReport_Click(对象发送者,ImageClickEventArgs e) {

        foreach (TreeNode tndim in tvCubedef.CheckedNodes)
        {

            lbFilter.Items.Add(tndim.Text);

        }
        foreach (ListItem item in lbFilter.Items)
        {
            item.Selected = true;
        }

        panFilter.Controls.Clear();
        connstr2 = System.Configuration.ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
        conn2.ConnectionString = connstr2;
        conn2.Open();
        CubeCollection CubeList = conn2.Cubes;
        string cb = ddlCubeList.SelectedItem.Text;

        foreach (ListItem li in lbFilter.Items)
        {

            ListBox listb = new ListBox();
            ListItem Memlist = new ListItem();
            listb.SelectionMode = System.Web.UI.WebControls.ListSelectionMode.Multiple;
            listb.Height = 150;
            listb.Width = 250;

            string Repl1 = li.Value.Replace("[", "");
            string Repl2 = Repl1.Replace("]", "");
            string[] DimMember = Repl2.Split('.');
            foreach (Member dimem in CubeList[cb].Dimensions[DimMember[0]].Hierarchies[DimMember[1]].Levels[DimMember[2]].GetMembers())
            {

                Memlist.Text = dimem.Name;
                listb.Items.Add(Memlist);
                panFilter.Controls.Add(listb);

            }

        }


    } '

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    您需要动态添加事件处理程序:

    listb.SelectedIndexChanged += new EventHandler(listb_SelectedIndexChanged);
    

    当然你也需要提供这个方法:

    protected void listb_SelectedIndexChanged(Object sender, EventArgs e)
    {
        ListBox listb = (ListBox) sender;
    }
    

    您是否最晚在page_load 中重新创建此ListBox 在每次回发(您应该这样做)并使用与以前相同的ID

    【讨论】:

    • @Tim.. 感谢您的回复。实际上我不需要添加事件处理程序......我想要做的是,我将在列表框中添加 lbFilter 字段,然后当我单击执行按钮时,它将创建带有每个字段值的动态列表框。前任。如果我在 lbFilter 中添加国家、州,那么将使用国家和州值创建 2 个动态列表框......所以一旦完成,我将从这 2 个列表框中选择项目并在我的 where 子句中构建我的查询。所以我正在努力寻找我创建的libox并阅读这些值。希望这能简要了解我的请求
    • 那么您是否尝试过panFilter.Controls.OfType<ListBox>() 在面板中查找所有列表框?
    • 不,我没试过。坦率地说,我对 asp.net 还很陌生,所以我正在一点一点地学习 asp.net……你能否给我一些代码语法,用于使用 'panFilter.Controls.OfType()' 实现上述想法
    • @user1849129:上面是一个 linq-query,您至少需要 .NET 3.5 并添加 using system.Linq;。该查询返回面板中的所有列表框(因此它按类型过滤)。您可以使用foreach 对其进行迭代或使用ToArray() 将查询具体化为ListBox[]。 ASP.NET 中最好的方法是尽可能避免使用动态控件。因此,在大多数情况下,您应该简单地切换已声明控件的可见性(在 aspx 标记上)。请注意,不可见的控件根本不会呈现给客户端(html)。这将使您的代码更具可读性、可维护性且不易出错。
    • @tom...再次感谢..是的,我正在使用 .net 4 框架。感谢您的建议...但我必须在我的页面中使用此动态选项:)...我在下面写了不确定这是否可行...'Dictionary selectedfil = new Dictionary(); foreach (ListBox ctl in panFilter.Controls.OfType()) { foreach (ListItem li in ctl.Items) { if (li.Selected) selectedfil.Add(li.Text, li.Value); } } '
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2011-06-03
    • 2017-07-07
    相关资源
    最近更新 更多