C# 以编程方式在网格中创建和填充多个列表框

C# 以编程方式在网格中创建和填充多个列表框,c#,wpf,reporting-services,foreach,listbox,C#,Wpf,Reporting Services,Foreach,Listbox,目标:为SSRS报告中的每个参数创建一个列表框 目前,如果报表有一个参数,代码工作正常。我的想法是填充ValidValue对象的列表,并将标签添加到列表框中。每个参数都应该发生这种情况 如何以编程方式创建多个列表框,使用foreach语句填充它们,然后将它们全部添加到网格中 这是我的密码: ReportParameterInfoCollection parameters; parameters = reportViewer.ServerReport.GetPara

目标:为SSRS报告中的每个参数创建一个列表框

目前,如果报表有一个参数,代码工作正常。我的想法是填充ValidValue对象的列表,并将标签添加到列表框中。每个参数都应该发生这种情况

如何以编程方式创建多个列表框,使用foreach语句填充它们,然后将它们全部添加到网格中

这是我的密码:

        ReportParameterInfoCollection parameters;
        parameters = reportViewer.ServerReport.GetParameters();
        List<string> labels = new List<string>();
        List<ValidValue> paramList = new List<ValidValue>();
        ListBox boxbox = new ListBox();

        foreach (ReportParameterInfo param in parameters)
        {
            paramList = param.ValidValues.ToList();
            labels.Clear();
            boxbox.Items.Clear();
            foreach (ValidValue val in paramList)
            {
                labels.Add(val.Label + " - " + val.Value);
            }

            foreach (string lab in labels)
            {
                boxbox.Items.Add(lab);
            }

            flyGrid.Children.Add(boxbox);
        }

编辑:参见下面的解决方案。对于任何好奇的人来说,我试图绕过SSRS糟糕的参数UI,并根据报告中的内容实现我自己的UI。

找到了答案。关键是创建ListBox对象列表,并每次向网格添加一定程度的划分。此外,还需要Grid.SetRow以避免重叠。以下是我最终使用的代码:

        List<ListBox> boxList = new List<ListBox>();
        List<string> labels = new List<string>();
        List<ValidValue> paramList = new List<ValidValue>();

        int i = 0;
        foreach (ReportParameterInfo param in parameters)
        {
            boxList.Add(new ListBox());
            paramList = param.ValidValues.ToList();
            labels.Clear();
            foreach (ValidValue val in paramList)
            {
                labels.Add(val.Label + " - " + val.Value);
            }

            foreach (string lab in labels)
            {
                boxList[i].Items.Add(lab);
            }

            flyGrid.RowDefinitions.Add(new RowDefinition());

            flyGrid.Children.Add(boxList[i]);
            Grid.SetRow(boxList[i], i);
            boxList[i].Margin = new Thickness(20);
            i++;
        }

当你运行这个时会发生什么?错误?什么都没有?看起来您正在清除每个参数的列表。您需要维护一个组合框值列表,然后在通过绑定或事件更改所选值时,更改ValidValue的标签。我不能给你任何代码,因为我不确定你在什么环境下工作。一种可能是一个列表和一个列表或字典,没有错误;列表框只会相互覆盖。谢谢你的回复,马修。我最终以不同的方式解决了这个问题,但我很欣赏这些想法。