2014-04-01 26 views
0

我很難過。我有2名相對相同嵌套列表視圖,按鈕上點擊事件,所述第一列表視圖是細,第二個然而是空的:爲什麼我的第二個listview爲空

ASPX:

... 
<asp:HiddenField ID="hfCourseId" ClientIDMode="Static" runat="server" Value="" /> 
... 


<asp:listView ... ID="lvResponseNames"> 
... 
    <InsertItemTemplate> 
     <asp:ListView ... ID="lvQuestions" DataSourceId="sdsQuestions" onItemDataBound="lvQuestions_ItemDataBound"> 
      <ItemTemplate> 
       ... 
      </ItemTemplate> 
     </asp:ListView> 
     <asp:SqlDataSource ID="sdsQuestions" ... 
      SelectCommand="SELECT col1, col2, col3 from tbl where id=0"> 
     </asp:SqlDataSource> 
     <asp:ListView ... ID="lvAdditionalQs" DataSourceId="sdsAdditionalQuestions" onItemDataBound="lvAdditionalQuestions_ItemDataBound"> 
      <ItemTemplate> 
       ...    
      </ItemTemplate> 
     </asp:ListView> 
     <asp:SqlDataSource ID="sdsAdditionalQuestions" ... 
      SelectCommand="SELECT col1, col2, col3 from tbl where [email protected]"> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="hfCourseId" Name="CourseId" PropertyName="Value" /> 
      </SelectParameters> 
     </asp:SqlDataSource>   
     <asp:Button ID="CustomInsertButton" runat="server" Text="Insert Attendee Responses >>" OnClick="CustomInsertButton_Click" /> 
    </InsertItemTemplate>  
<asp:listView ... ID="lvResponseNames"> 

aspx.cs:

protected void Page_Load(object sender, EventArgs e) 
{ 
    ... 
    if (int.TryParse(Request.QueryString["CourseId"], out iCourseId) 
    hfCourseId.Value = iCourseId; 

} 

... 

protected void CustomInsertButton_Click(object sender, EventArgs e) 
{ 

    //Default Questions 
    ListView lvQs = (ListView)lvResponseNames.InsertItem.FindControl("lvQuestions") as ListView; 
    Response.Write("Checking " + lvQs.Items.Count + " Defualt list view items. <br />"); 
    SqlDataSource dsDef = (SqlDataSource)lvResponseNames.InsertItem.FindControl("sdsQuestions") as SqlDataSource; 
    DataView dvDef = (DataView)dsDef.Select(DataSourceSelectArguments.Empty); 
    Response.Write("Checking " + dvDef.Count + " records found in datasource 'Default'. <br />"); 

    //Additional Quesetions 
    ListView lvAQs = (ListView)lvResponseNames.InsertItem.FindControl("lvAdditionalQs") as ListView; 
    Response.Write("Checking " + lvAQs.Items.Count + " Additional list view items. <br />"); 
    SqlDataSource dsAQs = (SqlDataSource)lvResponseNames.InsertItem.FindControl("sdsAdditionalQuestions") as SqlDataSource; 
    DataView dvAQs = (DataView)dsAQs.Select(DataSourceSelectArguments.Empty); 
    Response.Write("Checking " + dvAQs.Count + " records found in datasource 'Additional'. <br />"); 
    ... 
} 

,其輸出:

Checking 9 Defualt list view items. 
Checking 9 records found in datasource 'Default'. 
Checking 0 Additional list view items. 
Checking 6 records found in datasource 'Additional'. 

的「0附加」應改爲6,就像默認之一,但是對於我的生活,我無法弄清楚爲什麼它不能「看到」所有的ItemTemplates。

任何想法或想法現在如何調試?

更新4/1/14 9:45 PM:增加了sqldatasource SelectCommands,因爲問題似乎連接到第二個SqlDataSource上的ControlParameter。

當選擇命令是:

SelectCommand="SELECT col1, col2, col3 from tbl where id=0" 

它工作正常。

但是當它是:

SelectCommand="SELECT col1, col2, col3 from tbl where [email protected]" 

發現的項目爲0。不知怎的,它沒有找到控制ID,即使數據源是找到9個項目。

+0

你如何將值傳給'@ CourseId'?我會仔細檢查你是否正確地傳遞了這個參數,因爲它顯然沒有讀取它。 –

+0

我想你應該將它傳遞給你的'Select'語句,不是嗎?希望有所幫助。 –

+0

感謝@MilesWatson,這似乎是發生了什麼事。我不確定部分代碼複製到此處,但尚未顯示,請注意page_load中已設置hfCourseId,因此我不確定爲什麼嵌套列表視圖沒有選中它。但是我改變了一下代碼,並使用了一個asp:QueryStringParameter來代替,並且這樣做了。謝謝! – russds

回答

0

我結束了重新分解代碼一點點地用,而不是

<asp:QueryStringParameter Name="CourseId" QueryStringField="CourseId" /> 

<asp:ControlParameter ControlID="hfCourseId" Name="CourseId" PropertyName="Value" /> 

即使我設置在代碼中hfCourseId背後,由於某種原因它似乎沒有按照我需要的方式設置。可能與asp.net頁面生命週期有關。但稍微改變一下代碼,並將CourseId作爲QueryStringParameter使用似乎有訣竅。

0

你看看你從數據庫中得到什麼嗎?也許你得到了6條沒有任何內容的記錄或類似的東西。只是一個猜測。

+0

謝謝,是的,我沒有檢查。我不知道爲什麼數據源獲得6條記錄,但列表視圖顯示0.我檢查數據庫,並使用sql profiler查詢和正確的查詢正在完成,這是找到6條記錄。這只是一個謎,列表視圖是空的。 – russds

相關問題