Я использую 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 происходит, но элемент управления никогда не обновляется.
Что мне не хватает?
Спасибо!