2015-04-01 2 views
0

Цель: создать список для каждого параметра в отчете 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); 
     } 

EDIT: См решение ниже. Для всех, кому интересно, я пытаюсь обойти слабый пользовательский интерфейс SSRS для параметров и реализовать собственный пользовательский интерфейс на основе того, что находится в отчете.

+0

Что происходит, когда вы запускаете это? Ошибки? Ничего? – goobering

+0

Похоже, вы очищаете свои списки для каждого параметра. Вам нужно будет сохранить список значений combobox, а затем, когда выбранное значение будет изменено (через привязку или события), измените метки «ValidValue». Я не могу дать вам какой-либо код, потому что я не уверен, в каком контексте вы работаете. Возможно, это будет «Список » и «Список <Список >» или 'Словарь <строка, список >' –

+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++; 
     } 
Смежные вопросы