在asp.net转发器之间显示消息

时间:2012-09-10 15:39:45

标签: asp.net .net vb.net visual-studio-2010 asprepeater

我有一个数据集,它返回一些与某些评论相关的数据。数据集中的某些数据已从另一个数据库迁移到我正在使用的数据库中。因此,数据集包含公司A和公司B的数据。

我正在使用转发器来显示数据集,我需要在转发器之间显示一条消息,说这是公司A的评论,这是公司B的评论。我不想重复这个消息。一个简单的例子,

Company A reviews
Review 1- I am recommending this company, 10 out of 10
Review 2- I am recommending this company, 9 out of 10

Company B reviews
Review 3- I am recommending this company, 10 out of 10
Review 4- I am recommending this company, 9 out of 10

只是想知道这是否可以使用单个中继器。或者我必须使用2个不同的中继器并单独显示它们。

2 个答案:

答案 0 :(得分:0)

据我所知,ASP.net Repeater不支持分组。完成所需的理想解决方案(假设您的数据采用典型的父子关系构建)将使用嵌套转发器。外部转发器将绑定到您拥有的公司列表,然后内部转发器将绑定到每个公司的评论。

以下是Microsoft提供的有关典型嵌套转发器方案的示例文章:

http://support.microsoft.com/kb/306154

答案 1 :(得分:0)

您可以通过在转发器中使用额外渲染来执行此操作,这些渲染在更改时呈现标头。这是一个完整的例子:

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <%#GetHeader(Container.DataItem)%>
        <%#GetData(Container.DataItem)%>
    </ItemTemplate>
</asp:Repeater>

以及代码背后:

public int cLastGroup = 1;

protected void Page_Load(object sender, EventArgs e)
{
    Repeater1.DataSource = new List<int> { 2, 3, 4, 5, 6, 7 , 8 };
    Repeater1.DataBind();
}

public string GetHeader(object oItem)
{
    // some how like that I will made yours
    // if(cLastGroup != current) {cLastGroup = current; return string.format()}

    // but now for test I make the 3 and 7 as header
    if (((int)oItem) == 3 || ((int)oItem) == 7)
        return string.Format("<br><br> Header :{0}", (int)oItem);
    else
        return string.Empty;
}

public string GetData(object oItem)
{
    return string.Format("<br> data :{0}", ((int)oItem));
}

并提供此输出

data :2 

Header :3 
data :3 
data :4 
data :5 
data :6 

Header :7 
data :7 
data :8

Ps,为了让它按照您的喜好工作,您的数据必须按“公司”排序

也可以提供帮助:Want 10 rows in every page while binding to a repeater

希望这可以帮助您继续前进。