2

好吧,我担心这个标题可能会让人困惑,所以让我试着用我的例子来描述一下。假设我有一个包含 2 列、一个文本列和一个类别列的 SQL Server 表。

在这段代码的嵌套转发器中,我想显示 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.

我无法从外部转发器获取该类别数据,以便在查询内部使用另一个 SQL Server 表,该表中也有一个名为Category. 我想知道是否有人可以帮助我,或者是否有办法使用 SQL 查询进行排序。

简单来说,我只想用这些转发器对我的数据进行排序Category。所以让他们创建类似的内容:Category1、Cat1Data1、Cat1Data2、Category2、Cat2Data1、Cat2Data2 等等。

我很乐意提供有关此问题的更多信息,因为它会阻止在我正在为儿童工作的非营利性网站上进行最后的润色。这个问题已经持续了一个多星期了。我对 ASP.net、C# 和 SQL Server 还是很陌生。希望其他人也遇到过类似的事情。它似乎并不太牵强,它似乎很常见,但网上几乎没有关于它的文档。

4

2 回答 2

2

关键是向 ItemDataBound 添​​加一个事件处理程序,将数据绑定到每一行的嵌套转发器,如下所示: http: //www.codeproject.com/Articles/6140/A-quick-guide-to-using-nested-repeaters -在-ASP-NET

于 2013-08-01T21:16:08.963 回答
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() + "'";
}

那应该工作。

于 2013-08-01T21:23:27.767 回答