【问题标题】:Multiple asp:Repeater DataBind多个asp:Repeater DataBind
【发布时间】:2009-09-15 10:33:35
【问题描述】:

我有 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,但这也不起作用。

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

有什么想法吗? 提前致谢

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

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

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

    【讨论】:

    • 不,是不同的数据源:)
    • ...那么我怀疑你触发了一个错误,或者至少是你不应该依赖的未定义行为。
    【解决方案2】:

    如果您更改 DataSource,它会覆盖第一个。 我的想法是使用两个中继器。

    【讨论】:

    【解决方案3】:

    谢谢大家,我不知道我以前是怎么做到的(如果我做到了!),我浪费了创建这个问题和现在回答它的时间是解决方案的十倍。

    最后,我只是在处理绑定事件的情况下使用一个数据源完成所有工作,并且由于唯一改变的是被绑定的数据,我只是复制了转发器并重命名它并将另一个数据源连接到新的中继器并重新使用了数据绑定事件,花了整整 1 分钟...哈哈

    总之,做不到,使用两个repeater一个绑定事件处理程序

    还是谢谢大家! :)

    【讨论】:

      【解决方案4】:

      我不确定数据集/表,但我一直使用 ArrayLists 作为我的中继器的数据源,并且从未复制过它。

      但是一个Repeater在HTML代码中创建两个表的事实似乎不合理=O

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

      编辑:

      来自 MSDN 文档:

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

      【讨论】:

        【解决方案5】:

        如前所述,您所做的将覆盖第一个数据绑定的输出。

        但您可以在数据绑定之前组合列表

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

        【讨论】:

        • 好主意,但我正在为每个数据源更改 UL 上的一个类,所以很遗憾我无法绑定一个大数据集:(
        【解决方案6】:

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

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

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

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

        2) DataBind你的数据到DT1-->

        DBConnect con = new DBConnect();
        DT1 = con.GetDT1();
        
        Repeater1.DataSource = DT1;
        Repeater1.DataBind();
        

        3) DataBind DT2中的数据并合并到DT1中

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

        然后我们开始了。我们已经“附加”了我们的数据。

        【讨论】:

        • 尝试为您的代码使用代码块,使其更具可读性。 IE。你可以write code like this。只需使用 ` 即可
        猜你喜欢
        • 2013-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多