ASP .NET DetailsView控件ObjectDataSource参数化选择问题

时间:2010-11-03 14:42:14

标签: c# asp.net objectdatasource detailsview

我正在使用GridView和Details View,我的数据源是一个返回数据集的自定义ObjectDataSource。

这不是SQL服务器,我正在使用LDAP查询从Active Directory中获取用户。

我在ASPX页面中有两个自定义数据源,其中一个绑定到GridView,一个绑定到DetailsView。它们都具有可用的SelectMethods和Parameters。

GridView完美运行。当我针对Active Directory运行查询时,我使用自动生成的选择链接获取GridView中的人员列表。我可以单击此链接,它会通过DataKeyNames将我想要的任何值传递给SelectedIndexChanged事件。

我在此事件中正在做的是为DetailsView控件设置ObjectDataSource的参数。它会调用自定义类并返回包含ONE USER的DataSet。

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

所以......我知道这在某种程度上有效。

但是,当我在GridView的SelectedIndexChanged事件中设置参数时,自定义类中的select方法运行并返回正确的DataSet,但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代码:

     <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 :(得分:0)

好吧,我找到了答案。我的GridView在UpdatePanel(ASP .NET AJAX)中,而DetailsView则不在。显然,你不能拥有它。

当删除所有AJAX组件时,它可以工作。

当我将DetailsView作为GridView放在SAME UpdatePanel中时,它也有效。