【发布时间】: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