【问题标题】:Programmatically Creating and Populating Multiple Listboxes in Grid以编程方式在网格中创建和填充多个列表框
【发布时间】:2015-04-01 13:30:06
【问题描述】:

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

【问题讨论】:

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

标签: c# wpf reporting-services foreach listbox


【解决方案1】:

想通了。关键是创建一个 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++;
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2013-01-15
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多