C# DetailsView控件ObjectDataSource参数化选择问题

C# DetailsView控件ObjectDataSource参数化选择问题,c#,asp.net,objectdatasource,detailsview,C#,Asp.net,Objectdatasource,Detailsview,我使用的是GridView和Details视图,我的数据源是一个返回数据集的自定义ObjectDataSource 这不是SQL server,我使用LDAP查询从Active Directory获取用户 我在ASPX页面中有两个自定义数据源,一个绑定到GridView,另一个绑定到DetailsView。它们都有有效的方法和参数 GridView工作得非常好。当我对Active Directory运行查询时,我会在GridView中获得一个自动生成的select链接。我可以点击这个链接,它通过

我使用的是GridView和Details视图,我的数据源是一个返回数据集的自定义ObjectDataSource

这不是SQL server,我使用LDAP查询从Active Directory获取用户

我在ASPX页面中有两个自定义数据源,一个绑定到GridView,另一个绑定到DetailsView。它们都有有效的方法和参数

GridView工作得非常好。当我对Active Directory运行查询时,我会在GridView中获得一个自动生成的select链接。我可以点击这个链接,它通过DataKeyName将我想要的任何值传递给SelectedIndexChanged事件

在本事件中,我正在为DetailsView控件的ObjectDataSource设置参数。它确实调用自定义类并返回包含一个用户的数据集

这里有趣的是,当我在ASPX页面中设置这个ObjectDataSource时,我给它一个默认参数值。加载页面时,DetailsView控件将显示通过默认参数返回的值

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;
}
所以…我知道这在某种程度上是有效的

但是,当我在GridView的SelectedIndexChanged事件中设置参数时,自定义类中的select方法会运行并返回正确的数据集,但DetailsView控件不会使用新信息更新

以下是DetailsView的ObjectDataSource的ASPX代码:

<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绑定确实发生了,但是控件从未更新过


我遗漏了什么?

嗯,我找到了答案。我的GridView位于UpdatePanel(ASP.NETAjax)中,而DetailsView则不是。显然,你不可能有那个

当删除所有AJAX组件时,它就工作了


当我将DetailsView与GridView放在同一个UpdatePanel中时,它也起了作用。

我找到了答案。我的GridView位于UpdatePanel(ASP.NETAjax)中,而DetailsView则不是。显然,你不可能有那个

当删除所有AJAX组件时,它就工作了


当我将DetailsView与GridView放在同一个UpdatePanel中时,它也起作用。

如果它在另一个UpdatePanel中,UpdateMode设置为Conditional,并且您执行更新()时,它也起作用当您在gridview中执行选择时,在DetailsView UpdatePanel的代码隐藏中。如果它在另一个UpdatePanel中且UpdateMode设置为Conditional,并且当您在gridview中执行选择时,在DetailsView UpdatePanel的代码隐藏中执行Update(),则它也可以工作。
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;
}