我正在使用GridView和Details視圖,而我的數據源是返回數據集的自定義ObjectDataSource。ASP .NET DetailsView控件ObjectDataSource參數化選擇問題
這不是一個SQL服務器,我使用LDAP查詢從Active Directory中獲取用戶。
我在ASPX頁面中有兩個自定義數據源,一個綁定到GridView,另一個綁定到DetailsView。他們都有SelectMethods和參數工作。
GridView完美地工作。當我對Active Directory運行查詢時,我使用自動生成的選擇鏈接獲取GridView中的人員列表。我可以點擊這個鏈接,並通過DataKeyNames將所需的值傳遞給SelectedIndexChanged事件。
我在這個事件中做的是爲DetailsView控件設置ObjectDataSource的參數。它調用自定義類並返回一個包含一個用戶的數據集。
這裏有什麼有趣的是,當我在ASPX頁面中設置這個ObjectDataSource時,我給它一個Default參數值。加載頁面時,DetailsView控件顯示通過默認參數返回的值。
所以......我知道這在某種程度上有效。
但是,當我設置參數SelectedIndexChanged事件爲GridView,在自定義類運行select方法,並返回正確的數據集,但DetailsView控件是不用新信息更新。
下面是ObjectDataSource控件的ASPX代碼在DetailsView:
<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綁定確實發生,但控件永遠不會更新。
我錯過了什麼?
謝謝!
如果在另一個UpdatePanel中將UpdateMode設置爲Conditional,並且在GridView中進行選擇時在DetailsView UpdatePanel的代碼隱藏中執行Update(),它也可以工作。 – Dan7el 2010-11-08 18:48:48