【问题标题】:DetailsView control ObjectDataSource parameterized select IssueDetailsView控件ObjectDataSource参数化选择问题
【发布时间】:2010-11-03 14:42:13
【问题描述】:

我正在使用 GridView 和详细信息视图,我的数据源是返回 DataSet 的自定义 ObjectDataSource。

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

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

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

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

这里有趣的是,当我在 ASPX 页面中设置这个 ObjectDataSource 时,我给它一个默认参数值。当页面加载时,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>  

这是我的详细信息查看代码:

<asp:DetailsView ID="_prvDetailsViewShown" 
          CssClass="detailgrid"
          GridLines="None"
          DefaultMode="Edit"
          EmptyDataText="<No Details Available>"
          AutoGenerateRows="true"
          DataKeyNames="KerberosID"
          DataSourceID="_prvODSDetailsView"
          Width="100%"
          runat="server">
</asp: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;
}

我期望发生的是绑定发生并且控件会自动更新。事实上,我很确定 DetailsView 绑定确实发生了,但控件永远不会更新。

我错过了什么?

【问题讨论】:

    标签: c# asp.net objectdatasource detailsview


    【解决方案1】:

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

    删除所有 AJAX 组件后,它就可以工作了。

    当我将 DetailsView 放在与 GridView 相同的 UpdatePanel 中时,它也可以工作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多