2013-08-01 28 views
2

好吧恐怕標題可能會令人困惑,所以讓我試着用我的例子來描述這一點。假設我有一個包含2列,文本列和類別列的SQL Server表。ASP.net嵌套直放站拼圖:基於外部直放站數據的內部SQL查詢

在此代碼的嵌套中繼器中,我想顯示共享相同類別的SQL Server表中的所有數據行。 然而,,我需要得到的類別,來自上述轉發器。

<asp:Repeater ID="RepeaterOuter" runat="server" DataSourceID="SqlDataSourceGrantCategories"> 
<ItemTemplate> 

<%# Eval("Category") %> //Here I can access Category just fine. 

    <asp:SqlDataSource ID="SqlDataSourceGrantInfo" runat="server" ConnectionString="<%$ ConnectionStrings:CMSConnectionString %>" 
    SelectCommand='<%# "SELECT * FROM [cfhudson_grants] WHERE Category =" + Eval("Category") %>' /> //Here I cannot access the current Category coming from the outer repeater, so I cannot make a query based on Category :(

    <asp:Repeater ID="RepeaterInner" runat="server" DataSourceID="SqlDataSourceGrantInfo"> 
     <ItemTemplate> 
     <%# Eval("Text") %> //Text from the current data row. 
     </ItemTemplate> 
    </asp:Repeater> //This repeater should list all rows of the current category. 

</div>  
</ItemTemplate> 
</asp:Repeater> //This repeater brings the next Category to the nested repeater. 

我無法從外部獲得轉發該類別的數據,將查詢內使用其中也有一個列叫Category另一個SQL Server表。我想知道是否有人可以幫我解決這個問題,或者是否有辦法對SQL查詢進行排序。

最簡單的說,我只是想用這些中繼器對我的數據進行排序,排序爲Category。所以讓他們創建類似於:Category1,Cat1Data1,Cat1Data2,Category2,Cat2Data1,Cat2Data2等等。

我很樂意提供關於這個問題的更多信息,因爲它會阻止我在爲孩子們工作的非營利網站上進行最後的修改。這個問題已經持續了一個多星期了。我對ASP.net,C#和SQL Server非常新穎。希望別人遇到類似的事情。它似乎不太牽強,似乎很常見,但網上幾乎沒有關於它的文檔。

+0

如果有人做過嵌套SQL查詢程序,這個問題仍然存在。在您閱讀本文時,我很可能正在努力。我會接受並讚揚任何有助於我達成解決方案的答案。謝謝那些已經回覆的人。 – DNAInstant

+0

好吧,所以解決方法是我的兩個SQL表中的列都是在文本中創建的,所以我必須將我的查詢語句包裝在引號中!將很快更新解決方案。 – DNAInstant

回答

1

更改SelectCommand這樣:

SelectCommand='<%# getQuery(Eval("Category")) %>' 

所以SqlDataSource外觀現在是這樣的:

<asp:SqlDataSource ID="SqlDataSourceGrantInfo" runat="server" ConnectionString="<%$ ConnectionStrings:CMSConnectionString %>" SelectCommand='<%# getQuery(Eval("Category")) %>' /> 

在你的代碼後面添加如下函數:

public string getQuery(object cat) 
{ 
    return "SELECT * FROM [cfhudson_grants] WHERE Category ='" + cat.ToString() + "'"; 
} 

應該工作。

+1

兩個很好的答案,但我喜歡這一個,因爲它避免了太多的複雜性,但似乎它做我所需要的。 – DNAInstant

+0

好的,我今天試過,但仍然無法正常工作。我得到一個錯誤,即沒有找到列,即使我在我的兩個查詢中都選擇了*。 – DNAInstant

+0

如果您使用sql客戶端運行相同的查詢,會發生什麼情況?你確定Category字段是這樣寫的嗎? –

2

的關鍵是添加一個事件處理程序的ItemDataBound結合數據到嵌套中繼器爲每一行是這樣的: http://www.codeproject.com/Articles/6140/A-quick-guide-to-using-nested-repeaters-in-ASP-NET

+0

這是在代碼背後發生了什麼?我很困惑,但非常感謝你的鏈接。這是我還沒有讀過的,所以也許它可以幫助。 – DNAInstant

+0

是的。我鏈接的方法將避免需要SqlDataSource,但在代碼隱藏中將包含一行或兩行以上的代碼。 – Colin