多个asp:Repeater DataBind

时间:2009-09-15 10:33:36

标签: c# asp.net

我90%确定我之前已经实现了这一点,但我不记得我是怎么做到的。

我有一个转发器,我想在页面上使用两次,因为结构和数据绑定事件是相同的,但绑定到转发器的数据明显不同。

过去我相信我在转发器上设置数据源然后进行数据绑定,然后再次使用另一个数据源进行相同的操作,这样有效:

MyRepeater.DataSource = DataSourceOne;
MyRepeater.DataBind();
MyRepeater.DataSource = DataSourceTwo;
MyRepeater.DataBind();

现在这会在页面上生成两次html。在这个例子中有两个列表,其中包含不同的数据。

考虑一下,它可能是所使用的数据源的类型。在它可能是数据集/表之前我绑定到转发器,但这次我使用的是ArrayList。

ArrayList Items = new ArrayList();
Items = this.GetMenu(this._ProductsPageID);
this.rep_ProductsPortfolio.ItemDataBound += new RepeaterItemEventHandler(ProdPortItemDataBound);
this.rep_ProductsPortfolio.DataSource = Items;
this.rep_ProductsPortfolio.DataBind();

// Get portfolio
Items = this.GetMenu(this._PortfolioPageID);
this.rep_ProductsPortfolio.ItemDataBound += new RepeaterItemEventHandler(ProdPortItemDataBound);
this.rep_ProductsPortfolio.DataSource = Items;
this.rep_ProductsPortfolio.DataBind();

我也尝试为每个转发器使用不同的ArrayList,但这也不起作用。

目前发生的一切都是第二个数据绑定器重新绑定旧的转发器,我只有一个在页面上。

有什么想法吗? 提前致谢

6 个答案:

答案 0 :(得分:3)

您确定过去没有使用两个带有一个数据源的中继器吗?

我认为你需要在这里使用两个中继器。

答案 1 :(得分:2)

如果您更改了DataSource,则会删除第一个。 我的想法是使用两个中继器。

答案 2 :(得分:2)

谢谢大家,我无法弄清楚我之前是怎么做过的(如果我做过的话!),我浪费时间创建这个问题,现在对它的回应是解决方案的十倍。

最后,我刚刚使用一个数据源处理了绑定事件,并且唯一正在改变的是绑定的数据我只是复制了转发器并将其重命名并将其他数据源连接到新的转发器并重新使用数据绑定事件,整整1分钟...哈哈

简而言之,无法完成,使用两个转发器一个绑定事件处理程序

谢谢大家! :)

答案 3 :(得分:1)

我不确定数据集/表,但我总是使用ArrayLists作为我的Repeater的DataSource,并且永远不会重复它。

但似乎不可思议的是,一个Repeater在HTML代码中创建了两个表= O

无论如何,设置DataSource正在替换引用而不是“追加”它=)

编辑:

来自MSDN文档:

Repeater.DataSource属性:获取或设置提供填充列表数据的数据源。

答案 4 :(得分:0)

如前所述,您正在执行的操作将覆盖第一个数据绑定的输出。

但是你可以在列出数据之前组合列表

var allItems = new List<Foo>();
allItems.AddRange(fooDataSource1);
allItems.AddRange(fooDataSource2);
repeater1.Datsource = allItems;
repeater1.Databind();

答案 5 :(得分:0)

问题:设置数据源将替换引用,而不是“附加”

建议的修复程序: 您可以考虑使用多个DataTable,然后在设置Repeaters DataSource之前合并您的DataTable。然后,您将DataBind连接到中继器:)

步骤 1)创建2个公共数据表

public DataTable DT1 = new DataTable();
public DataTable DT2= new DataTable();

2)数据将数据绑定到DT1->

DBConnect con = new DBConnect();
DT1 = con.GetDT1();

Repeater1.DataSource = DT1;
Repeater1.DataBind();

3)数据将数据绑定到DT2中并合并到DT1

DBConnect con = new DBConnect();
DT2 = con.GetDT2Data();
DT1.Merge(DT2);

Repeater1.DataSource = DT1;
Repeater1.DataBind();

然后我们去。我们已经“附加”了数据。