C# 以编程方式在网格中创建和填充多个列表框
目标:为SSRS报告中的每个参数创建一个列表框 目前,如果报表有一个参数,代码工作正常。我的想法是填充ValidValue对象的列表,并将标签添加到列表框中。每个参数都应该发生这种情况 如何以编程方式创建多个列表框,使用foreach语句填充它们,然后将它们全部添加到网格中 这是我的密码:C# 以编程方式在网格中创建和填充多个列表框,c#,wpf,reporting-services,foreach,listbox,C#,Wpf,Reporting Services,Foreach,Listbox,目标:为SSRS报告中的每个参数创建一个列表框 目前,如果报表有一个参数,代码工作正常。我的想法是填充ValidValue对象的列表,并将标签添加到列表框中。每个参数都应该发生这种情况 如何以编程方式创建多个列表框,使用foreach语句填充它们,然后将它们全部添加到网格中 这是我的密码: ReportParameterInfoCollection parameters; parameters = reportViewer.ServerReport.GetPara
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的标签。我不能给你任何代码,因为我不确定你在什么环境下工作。一种可能是一个列表和一个列表或字典,没有错误;列表框只会相互覆盖。谢谢你的回复,马修。我最终以不同的方式解决了这个问题,但我很欣赏这些想法。