Настройка видимости управления кнопками в заголовке GridView - PullRequest
0 голосов
/ 08 ноября 2010

У меня есть сетка, которая отображает записи из таблицы данных. Я даю пользователям возможность выбрать подмножество данных в таблице, имея текстовое поле и кнопку поиска в заголовке представления сетки. Кнопка поиска запускает команду строки gridview, изменяет базовую команду select sqlDataSource и добавляет текстовое значение из текстового поля в качестве параметра.

Это работает гладко.

Кроме того, у меня есть кнопка «Показать все» в заголовке, которая очищает выбранные параметры, поэтому отображаются все записи в таблице. Опять же, это работает отлично.

Что НЕ работает, так это управление видимостью кнопки «Показать все». Ниже приведена HTML-разметка для шаблона заголовка сетки данных:

<HeaderTemplate>
    <asp:Button ID="btnShowAll" runat="server" CausesValidation="False" CommandName="ShowAll" Text="Show All" />
    <asp:Button ID="btnSearch" runat="server" CausesValidation="True" CommandName="Search" Text="Search" ValidationGroup="vldSearch" /><br />
    <asp:TextBox ID="txtSearchName" runat="server"></asp:TextBox>&nbsp;
    <asp:RequiredFieldValidator ID="vldSearchName" runat="server" ErrorMessage="You have to provide an attorney name to search for." Text="*" ControlToValidate="txtSearchName" ValidationGroup="vldSearch" ForeColor="White"></asp:RequiredFieldValidator>
</HeaderTemplate>

В обработчике событий Row Command, вот как я устанавливаю видимость кнопки:

If Not Me.dgAttorneys.HeaderRow Is Nothing Then
    Dim btnShowAll As Button = Me.dgAttorneys.HeaderRow.FindControl("btnShowAll")
    btnShowAll.Visible = Me.sqlAttorneys.SelectParameters.Count > 0
    Trace.Write("Show all status is " & btnShowAll.Visible.ToString)
End If

Оператор трассировки показывает правильный видимый статус - если нажата кнопка «показать все», я выполняю SelectParameters.Clear () для sqlAttorneys sqlDataSource.

Моя проблема связана с неправильным пониманием того, как работает метод «FindControl» - я предположил, что мой новый btnShowAll, который я определяю, на самом деле является ссылкой на «физический» элемент управления на странице aspx, поэтому любые изменения, которые я делаю в своем Локальный объект отражается в элементе управления на странице.

Если это не так, как лучше всего получить ссылку на элемент управления кнопки в строке заголовка вида сетки?

1 Ответ

0 голосов
/ 09 ноября 2010

Мне удалось заставить работать кнопку - все это было связано с тем, где в общем процессе я настраивал видимость кнопки. Я переместил этот блок кода (установив видимость кнопки в зависимости от наличия параметра поиска) в событие DataBound для сетки данных, и видимость кнопки была установлена ​​так, как и должно быть.

Я подозреваю, что это связано с тем, что во время всего процесса привязки данных, основанного на состоянии общего вида сетки и каждой строки сетки, соответствующий объект шаблона используется для визуализации каждой строки. Таким образом, любые изменения, внесенные в свойство visible кнопки, были переопределены в процессе привязки данных. Сдвиг моего кода для установки видимости до тех пор, пока не будет завершено связывание данных, оно вступило в силу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...