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

时间:2015-04-01 13:30:06

标签: c# wpf reporting-services foreach listbox

目标:为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。

1 个答案:

答案 0 :(得分:0)

想出来。关键是创建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++;
        }