2010-11-03 39 views
0

我正在使用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綁定確實發生,但控件永遠不會更新。

我錯過了什麼?

謝謝!

回答

0

嗯,我找到了答案。我的GridView位於UpdatePanel(ASP .NET AJAX),而DetailsView不是。顯然,你不能這樣做。

當刪除所有的AJAX組件,它的工作。

當我將DetailsView作爲GridView放入SAME UpdatePanel時,它也起作用。

+0

如果在另一個UpdatePanel中將UpdateMode設置爲Conditional,並且在GridView中進行選擇時在DetailsView UpdatePanel的代碼隱藏中執行Update(),它也可以工作。 – Dan7el 2010-11-08 18:48:48