多字段分组中继器

分享于 

8分钟阅读

Web开发

  繁體 雙語

介绍

在远程搜索和远程控制器搜索完成之后,我就得到了我所需要的内容。 所以,我做的任何开发人员都有太多的时间,没有钱会花钱,我做了自己的工作。

背景

really really really really veer ASP.NET" Grouping。 我使用他的GroupingRepeater 代码作为我自己代码的起点。 感谢 Rob !

问题

我经常发现,我需要一个可以处理多个查询返回的数据库结果的中继器。 加入 语句。我们都知道 加入 语句可以产生重复的信息。 rob的文章是一个伟大的起点,他的控制有一个重大的缺陷: 如果唯一重复数据的"类别"不止一个,该怎么办?

解决办法是什么呢

为了能够实现特征类型,这个控件更复杂。 它的工作方式是: 不只一个 GroupTemplate,需要多少就有多少。 可以通过查看模板看起来像什么来解释。

注意:由于页面呈现的冲突," HeaderTemplate"和" ItemTemplate"标记的大写和/或者间隔不正确。

<uc1:GroupingRepeaterID="Items"Runat="Server"><headerTemplate><table><tr><td>Customer Name</td><td>Order History</td><td>Comments</td></tr></headerTemplate><itemTemplate><tr><td><%# DataBinder.Eval(Container.DataItem, 
 "CustomerName") %></td><td><%# ((GroupingRepeater)Container.Parent).GroupData("OrderHistory")%></td><td><%# ((GroupingRepeater)Container.Parent).GroupData("Comments") %></td></tr><itemTemplate><GroupTemplate><div><%# DataBinder.Eval(Container.DataItem, "OrderDate") %> - 
 <%# DataBinder.Eval(Container.DataItem, "OrderID") %>: 
 $<%# DataBinder.Eval(Container.DataItem, "OrderAmount") %></div></GroupTemplate><GroupTemplate><div>Posted by
 <%# DataBinder.Eval(Container.DataItem, "EmployeeName") %> on 
 <%# DataBinder.Eval(Container.DataItem, "CommentPostedDate") %>: 
 <%# DataBinder.Eval(Container.DataItem, "Comment") %></div></GroupTemplate><GroupIdentifierIndex="-1"Key="ItemTemplate"Field="ID"/><GroupIdentifierIndex="0"Key="OrderHistory"Field="OrderID"/><GroupIdentifierIndex="1"Key="Comments"Field="CommentID"/><SeparatorTemplate><tr><tdcolspan="3"></td></tr></SeparatorTemplate><SeparatorTemplate><hr></SeparatorTemplate><SeparatorIdentifierIndex="0"Key="ItemTemplate"/><SeparatorIdentifierIndex="1"Key="Comments"/><FooterTemplate></table></FooterTemplate></uc1:GroupingRepeater>

现在有一些解释

既然你已经看到了这个示例,现在我将解释如何设置模板代码。

模板

控件,FooterTemplate

这些模板的工作方式与标准 ASP.NET Repeater 中的工作方式一样。

AlternatingItemTemplate

这里版本代码中不支持这里模板。 对不起,我lazy了 !

ItemTemplate

这个模板的工作方式基本上与标准 ASP.NET Repeater 中的ItemTemplate 一样。 例外是你必须确定将被分组的项目的区域。 你可以使用以下代码来执行这里操作:

<%# ((GroupingRepeater)Container.Parent).GroupData("GroupKey") %>

" GroupKey"应该被你分配给该组的任何键替换为相应的GroupIdentifier,我将在下面解释。

GroupTemplate

使用这些模板设置你的各个组。 这些只与任何 ITemplate 属性一样,除了你可以拥有多少。

SeparatorTemplate

如果你愿意,你可以指定一个 SeparatorTemplateItemTemplate 项之间使用,并且你的GroupTemplate 是你喜欢的。 如果为 ItemTemplate 或者 GroupTemplate 指定了 SeparatorTemplate,则将自动在每个项之间放置它。

标识符

通过 TemplateIdentifier 控件,GroupingRepeater 可以通过将开发人员友好的"密钥"与模板的索引位置关联来实现多个模板。

GroupIdentifier

GroupIdentifier 模板用于关联和标识使用哪一个 GroupTemplate。 例如:

<GroupIdentifierIndex="1"Key="Comments"Field="CommentID"EmptyGroupDataText="(No Comments)"/>

这里 TemplateIdentifier 将标识将由密钥" Comments"引用的GroupTemplate,并且是repeater控件(" Index"为零) 中列出的第二个 GroupTemplate。 " Field"属性指定 DataSource的哪个字段决定什么时候创建新的组项。 如果该字段的值已经在组项中,则将跳过行。 在没有显示数据的情况下," EmptyGroupDataText"属性指定应在事件中呈现哪些文本。 如果未指定这里属性,则在该情况下不显示任何内容。

注意:必须有一个 GroupIdentifier,它的Index 属性设置为" -1"并且它的Key 属性设置为" ItemTemplate"。 这里标识符的Field 属性确定什么时候创建新的ItemTemplate 项。

注:必须为指定的每个 GroupTemplate 指定一个 GroupIdentifier

SeparatorIdentifier

除了 FieldEmptyGroupDataText 属性不显示外,SeparatorIdentiferGroupIdentifer 非常相似。 GroupIdentifier 一样,你必须为指定的每个 SeparatorTemplate 指定一个 SeparatorIdentifier。 但是,你不需要为 ItemTemplate 指定 SeparatorIdentifier

那就是它 !

我希望你能找到这个。 请注意,我没有完成任何大量的调试,但是我将在我自己的调整中更新代码。 祝你好运 !

Zounds,更新 !

09 2006年02月

许多人已经在评论中发布了关于工作演示的。 我们将在网页顶部的下载部分提供一个演示。 它看起来不太美观,但它应该给你一个很好的理念,它是如何工作的。 另外,我将整个 C#.NET 项目添加到源文件中,包括编译后的二进制文件,。 enjoy!


rep  字段  Group