ASP .NET DetailsView Элемент управления ObjectDataSource Параметризованный Выбор Выпуск - PullRequest
0 голосов
/ 03 ноября 2010

Я использую GridView и представление сведений, и мой источник данных представляет собой пользовательский ObjectDataSource, который возвращает набор данных.

Это не сервер SQL, я использую запрос LDAP для получения пользователей из ActiveDirectory.

У меня есть два пользовательских источника данных на странице ASPX, один из которых связан с GridView, а другой - с DetailsView.У них обоих есть SelectMethods и Parameters, которые работают.

GridView работает отлично.Когда я запускаю запрос к Active Directory, я получаю свой список людей в GridView с автоматически сгенерированной ссылкой выбора.Я могу щелкнуть эту ссылку, и она передает любое значение, которое я хочу через DataKeyNames, в событие SelectedIndexChanged.

В этом событии я настраиваю параметр ObjectDataSource для элемента управления DetailsView.Он вызывает пользовательский класс и возвращает обратно DataSet, который содержит ОДНОГО ПОЛЬЗОВАТЕЛЯ.

Здесь интересно то, что когда я настраиваю этот ObjectDataSource на странице ASPX, я даю ему значение параметра Default.Когда страница загружается, появляется элемент управления DetailsView со значениями, возвращаемыми через параметр по умолчанию.

Итак ... Я знаю, что это работает в некоторой степени.

Однако, когда я устанавливаю параметрв событии SelectedIndexChanged для GridView метод select в пользовательском классе запускается и возвращает правильный DataSet, но элемент управления DetailsView не обновлен с новой информацией.

Вот код ASPXдля ObjectDataSource для DetailsView:

<asp:ObjectDataSource ID="_prvODSDetailsView" 
                  SelectMethod="_pubGetSingleUserDataSetByKerberosID"
                  TypeName="NotImportant"
                  runat="server">
   <SelectParameters>
  <asp:Parameter Direction="Input" Name="param_KerberosID" Type="String" DefaultValue="somedefaultvalue" />
   </SelectParameters>
</asp:ObjectDataSource>  

Вот мой код DetailsView:

     <asp:DetailsView ID="_prvDetailsViewShown" 
              CssClass="detailgrid"
              GridLines="None"
              DefaultMode="Edit"
              EmptyDataText="<No Details Available>"
              AutoGenerateRows="true"
              DataKeyNames="KerberosID"
              DataSourceID="_prvODSDetailsView"
              Width="100%"
              runat="server">

Просто для повторения.Это работает при загрузке первой страницы с использованием значения по умолчанию из параметра.

        void _prvGridView_SelectedIndexChanged( object sender, EventArgs e )
    {
        DataKey k = _prvGridView.SelectedDataKey;
        string kerberosID = k.Value.ToString();
        Parameter parameter = new Parameter( "param_KerberosID", TypeCode.String, kerberosID );
        _prvODSDetailsView.SelectParameters[ 0 ] = parameter;
    }

Я ожидаю, что произойдет привязка, и элемент управления будет автоматически обновлен.На самом деле я почти уверен, что привязка DetailsView происходит, но элемент управления никогда не обновляется.

Что мне не хватает?

Спасибо!

1 Ответ

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

Ну, я нашел ответ.Мой GridView находится в UpdatePanel (ASP .NET AJAX), а DetailsView - нет.Видимо, этого не может быть.

Когда все компоненты AJAX были удалены, все заработало.

Когда я помещал DetailsView в ЖЕ UpdatePanel как GridView, он также работал.

...