Отчет с множественным выбором параметров

Обсуждение Stimulsoft Reports.NET
Ответить
Алексей
Сообщения: 36
Зарегистрирован: 29 авг 2008, 08:39
Откуда: Харьков
Контактная информация:

Отчет с множественным выбором параметров

Сообщение Алексей »

Добрый день

Пытаюсь разобраться с построением отчета с множественным выбором параметров.
Скажу сразу, что примеры я смотрел, но именно такой реализации не нашел.

Есть источник данных, в который отбирается некий список исходя из выбранных значений второго источника данных.
Например, есть таблица Товаров, и мне надо сделать отчет, в диалоговой форме которого я могу выбрать несколько групп товаров, в которых эти товары находятся.
Т.е. я использую контрол CheckedListBoxControl.
В вашем примере "Selecting Rows" я не сильно понял, как это реализовано - вроде бы одним источником данных с фильтром по бэнду Дата.

По идее, надо делать условие
Where ggID in (@ggID)

Но, в каком виде созвращаются значения из контрола CheckedListBoxControl и как их мне передать в отчет?
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Отчет с множественным выбором параметров

Сообщение Edward »

Здравствуйте.

В прммере SelectingRows используется свойство Control объекта StiCheckedListBoxControl, которое является обычным CheckedListBox из .Net.

Вот код для установки всех значений в этом CheckedListBox в состояние 'checked':

for (int index = 0; index < CheckedListBoxControl1.Control.Items.Count; index++)
{
CheckedListBoxControl1.Control.SetItemChecked(index, true);
}

Все строки появляются автоматически при загрузке формы, поскольку заполнено свойство Items = Products.ProductName

Каждая строка в таблице имеет свой номер и в соответствии с этим номером мы либо включаем, либо выключаем DataBand в событии BeforePrintEvent:

DataBand1.Enabled = CheckedListBoxControl1.Control.GetItemChecked(DataBand1.Position);

В Вашем случае Вам придется сравнивать не индекс, а текстовое значение элемента списка:

checkedListBoxControl1.Control.Items[index].ToString()

Более подробную информацию о работе CheckedListBox Вы можете найти здесь:

http://en.csharp-online.net/CheckedListBox

http://msdn2.microsoft.com/en-us/librar ... s.80).aspx

Спасибо.
Алексей
Сообщения: 36
Зарегистрирован: 29 авг 2008, 08:39
Откуда: Харьков
Контактная информация:

Отчет с множественным выбором параметров

Сообщение Алексей »

Добрый день

У меня возникли сложности в реализацией отчета.

Как получилось сделать:
1. Создал переменную cIDs, в которую буду передавать набор гуидов.
2. В главном запросе поставил условие:
where (PATINDEX('%'+cast(c.cID as varchar(40))+'%', @cIDs) > 0)
3. На диалоговую форму положил компонент CheckListBoxControl (имя LB). В свойствах Items выбрал из источника данных поле сName.
4. На диалоговую форму положил еще один компонент CheckListBoxControl (имя LBValues). Сделал его невидимым. В свойствах Items выбрал из источника данных поле сID.
5. На кнопку ОК навесил обработчик:

cIDs = string.Empty;
CheckedListBox tempControl = (CheckedListBox)LB.Control;
if (tempControl.CheckedIndices.Count > 0)
{
for(int i = 0; i < tempControl.CheckedIndices.Count; i++)
{
cIDs += "'" + LBValues.Items[tempControl.CheckedIndices].ToString() + "', " ;
}
}

Т.е. в итоге данные отображаются в одном листбоксе, а гуиды передаются с другого.

Отсюда и возникают вопросы:
1. Насколько верная данная реализация? Может есть проще способ?
2. Можно ли как-то передавать гуиды с основного листбокса? Иначе получилось только если сделать другой скрытый листбокс.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Отчет с множественным выбором параметров

Сообщение Edward »

Здравствуйте.

Возможен также следующий подход: Вы создаете коллекцию объектов для компонента CheckedListBox. Каждый объект из этой коллекции содержит список необходимых Вам полей. В FormLoad основной диалоговой формы Вы присваиваете этот список объектов в компонент CheckedListBox.Control. Также должен быть переопределен метод ToString() этого компонента, который будет возвращать отображаемое значение в CheckedListBox.

Спасибо.
Ответить