帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:数据绑定  NEST  数据  Nested  BIN  嵌套重复  rep  

介绍

本文是一个小型演示项目,使用嵌套 Repeater 来显示具有相同模式的DataTable 对象的可变数量。

使用代码

在继续之前,我认识到以下解决方案不是最优雅的,但是它的工作是最受欢迎的。

我们有两个 Repeater 控件。 内部 Repeater 控件置于用户控件内,而外部 Repeater 包含在APSX页中,它的<ItemTemplate> 为用户控件。

首先,我们先介绍一下控件的细节,首先,让我们在 App_Code 文件夹中引入小的customDataItem.cs 类。 由于某些原因,绑定 DataSet 时,Repeater 不会按照预期呈现所有表,而是多次重复设置的最后一个 DataTable。 因此,替代方法是将每个 DataTable 对象封装在一个新对象中。 所以,我创建了一个名为 CustomDataItem的类。

publicclass CustomDataItem 
{ 
 private DataTable _Data;
 public DataTable Data { get { return _Data; } set { _Data = value; } } 
 public CustomDataItem(DataTable data) 
 { 
 _Data = data; 
 } 
}

如你所见,它是一个非常简单的类,它封装作为参数传递给构造函数的DataTable 对象。 就是这样,基本上。

接下来,我们有了包含内部 Repeater的用户控件( .ascx ) 代码。 这是相当简单和自我解释的。 你将注意到,我将 Literal 控件作为标题。 数据绑定时,Literal 文本将被设置为表名。

<h2><span><asp:Literalrunat="server"ID="ltrTableName"/></span></h2><asp:RepeaterID="innerRep"runat="server"><HeaderTemplate><tablecellpadding="2"cellspacing="5"border="true"><thead><tr><th><b>Name</b></th><th><b>Address</b></th><th><b>PostCode</b></th></tr></thead></HeaderTemplate><ItemTemplate><tr><td><%# DataBinder.Eval(Container.DataItem,"Name") %></td><td><%# DataBinder.Eval(Container.DataItem,"Address") %></td><td><%# DataBinder.Eval(Container.DataItem,"PostCode") %></td></tr></ItemTemplate><FooterTemplate></table></FooterTemplate></asp:Repeater>

现在,对于用户控件后面的代码:

publicpartialclass InnerRepeaterUserControl : System.Web.UI.UserControl 
{
 private CustomDataItem _DataItem; 
 public CustomDataItem DataItem { get { return _DataItem; } 
 set { _DataItem = value; } }
 protectedvoid Page_Load(object sender, EventArgs e) 
 { 
 if (!IsPostBack) 
 BindData(); 
 }
 protectedoverridevoid OnPreRender(EventArgs e) 
 { 
 base.OnPreRender(e); 
 } 
 privatevoid BindData() 
 { 
 try 
 { 
 binnerRep.DataSource = _DataItem.Data;
 innerRep.DataBind(); 
 ltrTableName.Text = _DataItem.Data.TableName; 
 } 
 catch { }
 }

BindData() 方法将包含在 CustomDataItem 对象中的DataTableLiteral 文本绑定到表名。 在主ASPX页上激发的innerRepeater_DataBound() 事件中传递 CustomDataItem。 我们稍后会详细介绍一下。

网页上的ASPX代码很简单。 这里,我们所做的就是 register 控件并添加外部 Repeater,并设置对外部 RepeaterItemDataBound的引用。

<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%><%@RegisterSrc="~/InnerRepeaterUserControl.ascx"TagPrefix="uc"TagName="InnerRep"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><headrunat="server"><title>Repeater Demo</title></head><body><formid="form1"runat="server"><div><asp:Repeaterrunat="server"ID="outerRepeater"onItemDataBound="outerRepeater_ItemDataBound"><ItemTemplate><uc:InnerReprunat="server"ID="tblInnerRep"/></ItemTemplate></asp:Repeater></div></form></body></html>

网页后面的C# 代码是完成大部分工作的地方。 这个例子中,我在 createDataTables()的代码中创建了三个简单的数据表,并将它们添加到 CustomDataItem 对象的一个通用 List。

BindData() 只调用该方法并将 List 绑定到外部 Repeater

最后,在 outerRepeater_ItemDataBound 中找到内部 Repeater 控件,将外部 Repeatere.DataItem 转换为 CustomDataItem,并将它的设置为内部 RepeaterDataItem

protectedvoid Page_Load(object sender, EventArgs e) 
{ 
 if (!Page.IsPostBack) 
 { 
 base.OnInit(e); 
 BindData(); 
 } 
} privatevoid BindData() 
{ 
 List<CustomDataItem> dataItems = createDataTables(); 
 outerRepeater.DataSource = dataItems; 
 outerRepeater.DataBind(); 
} private List<CustomDataItem> createDataTables() 
{ 
 //instantiate Generic list & set capacity to 3  List<CustomDataItem> dataItems = new List<CustomDataItem>(3); 
 // Logic for creating example DataTable objects here //....... //....... //create new CustomDataItems and add to List<>  dataItems.Add(new CustomDataItem(tbl1)); 
 dataItems.Add(new CustomDataItem(tbl2)); 
 dataItems.Add(new CustomDataItem(tbl3)); 
 return dataItems; 
} protectedvoid outerRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
 if (e.Item.DataItem is CustomDataItem) 
 { 
 CustomDataItem dataItem = e.Item.DataItem as CustomDataItem; 
 InnerRepeaterUserControl ctrl = 
 e.Item.FindControl("tblInnerRep") as InnerRepeaterUserControl; 
 if (ctrl!= null) 
 ctrl.DataItem = dataItem; 
 } 
}

Points of interest

无。

历史记录

无更改。



文章标签:数据  rep  BIN  NEST  Nested  数据绑定  嵌套重复  

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语