目标:为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。
答案 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++;
}