我正在使用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绑定确实发生了,但控件永远不会更新。
我错过了什么?
谢谢!
答案 0 :(得分:0)
好吧,我找到了答案。我的GridView在UpdatePanel(ASP .NET AJAX)中,而DetailsView则不在。显然,你不能拥有它。
当删除所有AJAX组件时,它可以工作。
当我将DetailsView作为GridView放在SAME UpdatePanel中时,它也有效。