Я прочитал много статей MSDN в веб-средстве просмотра отчетов и попробовал несколько способов, чтобы отключить поиск, но нашел только один из них:
Во-первых, в коде вы можете установить текстовое поле поиска следующим образом:
TextBox txt;
txt = (TextBox) this.ReportViewer1.Controls[1].Controls[4].Controls[0];
txt.Text = "test";
Я сделал это в событии PreRender ReportViewer. Позиция 1 в первом списке элементов управления - это элемент управления панели инструментов, # 4 - элемент управления группы поиска, а затем в этой группе первым элементом управления является текстовое поле. Второе число (4) может варьироваться в зависимости от того, что вы показываете / не показывает на панели инструментов. Я работал с настройками просмотра отчетов по умолчанию. Это взлом, но это работает.
Затем я попытался запустить событие поиска самостоятельно, но это не привело к тому, что поиск работал, хотя он и включил событие с правильной информацией ....
Итак, вот что я сделал.
Я создал функцию JavaScript:
<script type="text/javascript">
function OnFirstLoad() {
if (!isPostBack)
document.getElementById('ReportViewer1').ClientController.ActionHandler('Search', document.getElementById('ReportViewer1_ctl01_ctl04_ctl00').value);
}
</script>
Я прочитал источник страницы .aspx, нашел текст «find» и выяснил, что был вызов на стороне клиента. Вы заметите, что ctl01 & ctl04 и ctl00 следуют той же нумерации, что и код на стороне сервера. Вам необходимо изменить это, чтобы отразить ваш код. Опять же, второй (ctl04) - тот, который может меняться в зависимости от того, как настроена ваша панель инструментов.
Затем я устанавливаю событие загрузки для тела страницы в функцию javascript:
<body onload="OnFirstLoad();">
Последний трюк состоял в том, чтобы вызывать этот код только в первый раз. Поэтому я добавил это к событию загрузки страницы с кодом формы:
If (!IsPostBack)
ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = false;", true);
else
ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = true;", true);
Это создает переменную, которую проверяет функция javascript. При первом обходе он ложный, поэтому он вызывает функцию поиска в средствах просмотра отчетов, в противном случае он равен true и не срабатывает.
Это довольно плохой хак на мой взгляд и хрупкий. Для изменения настроек панели инструментов средства просмотра отчетов могут потребоваться изменения JavaScript и кода для установки текстового поля.
Я создал отчет, состоящий из нескольких страниц, и первый удар пришелся только на третью страницу, и он пошел прямо к нему. Оттуда следующая кнопка прекрасно работала до конца отчета.
К сожалению, это не так просто, как просмотрщик отчетов на основе окон или серверный просмотрщик отчетов. :)
Удачи!