2009-11-22 39 views
0

我想打電話ObjectDataSource.Select()給出了相同的結果調用ObjectDataSource.DataBind(),但在某些情況下,這似乎並不爲真:爲什麼ObjectDataSource.DataBind()返回行,而ObjectDataSource.Select()不行?

<asp:ObjectDataSource ID="ODS1" TypeName="PersonDB" SelectMethod="GetPeople" 
     runat="server"></asp:ObjectDataSource> 

<br> 

<asp:ListBox ID="ListBox1" DataSourceID="ODS1" DataTextField="PersonID" 
     AutoPostBack="true" runat="server"></asp:ListBox> 

<br> 

<asp:ObjectDataSource ID="ODS2" InsertMethod="InsertEmployee" 
     TypeName="PersonDB" SelectMethod="GetPerson" runat="server"> 
      <SelectParameters> 
       <asp:ControlParameter ConvertEmptyStringToNull="True" Name="PersonID" 
        PropertyName="SelectedValue" ControlID="ListBox1" /> 
      </SelectParameters> 
</asp:ObjectDataSource> 

<br> 

<asp:DetailsView ID="DetailsView1" AutoGenerateInsertButton="true" DataSourceID="ODS2" 
     runat="server"> </asp:DetailsView> 


protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     ODS1.Select(); //same as calling ODS1.DataBind(); 
    } 

    if (IsPostBack) 
    { 
     ODS2.Select(); // returns no results 
    } 
} 


在上面的代碼中調用ODS1.Select()產生與調用相同的結果ODS1.DataBind()。但如果在回發用戶選擇列表框,ODS2.Select()仍然不會返回任何結果,但如果我們替換ODS2.Select();ODS2.DataBind();然後返回一行。那麼爲什麼不ODS2.Select();返回任何結果,但是ODS2.DataBind();呢?


謝謝

編輯:

假設用戶在一個表中選擇一個項目 - >看來,當我們調用ODS2.Select(),ODS2出於某種原因無法綁定到ListBox1.SelectedValue並從此屬性提取值

回答

1

ODS2有一個Select參數,它在示例頁面加載時綁定到一個ListBox控件被數據綁定。列表框中有什麼?在傳遞給ODS2的PersonID參數中傳遞了什麼內容?

開始回答您的問題最明顯的方法是在PersonDB的GetPerson方法中設置一個斷點,並查看傳遞的參數是什麼。然後按照代碼查看獲取的內容。

+0

第一次創建頁面時,DetailsView不會顯示任何結果,但是當用戶在列表框中選擇一個項目時,ODS2應該(並在調用ODS2.DataBind()時返回結果)。 – carewithl 2009-11-22 17:48:57

+0

當列表框中沒有選中任何內容時,你如何處理該案例?當你第一次加載時可能是這種情況。 – 2009-11-22 19:17:37

+0

確實,在第一次加載DetailsView時不顯示任何內容,但在回發時它應該,即使我們調用ODS2.Select(假設用戶在ListBox中選擇一個項目) – carewithl 2009-11-23 16:22:59

相關問題