Здравствуйте.
Вы можете использовать следующий код, например:
Код: Выделить всё
StiReport report = new StiReport();
report.Load(@"d:\report.mrt");
//for RequesFromUser panel
StiVariable var1 = report.Dictionary.Variables["Variable1"];
var1.DialogInfo.Keys = new string[] { "1", "2", "3" };
var1.DialogInfo.Values = new string[] { "111", "222", "333" };
report.Compile();
report.Show(true);
и прописать следующий запрос в SqlDataSource:
Код: Выделить всё
select * from YourTable {Variable1.Count == 0 ? "" : "where YourField in (" + Variable1.ToQueryString() + ")"}
Тут есть нюанс. По умолчанию переменные типа List заполняются значениями из словаря только после подключения словаря к источникам данных.
Поэтому при первом подключении источника данных эта переменная будет пустая, и выражение Variable1.ToQueryString() даст пустую строку, соответственно весь запрос выдаст ошибку.
Чтобы избежать этого, в запросе добавлена дополнительная проверка.
В данном примере сразу будут отображаться все данные, а после нажатия кнопки Submit отчет перестроится с использованием только выбранных данных.
Если надо сразу отображать только нужные данные, то есть два варианта:
1. Надо установить свойство отчета report.RequestParameters = true. При этом до первого нажатия кнопки Submit будет отображаться только пустая страница отчета, а построение начнется только после нажатия кнопки.
2. Сразу инициализировать переменную отчета дополнительными значениями.
Код: Выделить всё
StiReport report = new StiReport();
report.Load(@"d:\report.mrt");
//for RequesFromUser panel
StiVariable var1 = report.Dictionary.Variables["Variable1"];
var1.DialogInfo.Keys = new string[] { "1", "2", "3" };
var1.DialogInfo.Values = new string[] { "111", "222", "333" };
//for report rendering before RequesFromUser panel
LongList list = new LongList();
list.AddRange(new long[] {1,2,3});
report.Compile();
report.CompiledReport["Variable1"] = list;
report.Show(true);
Спасибо.