多对多父/子中继器,数据关系c#

本文关键字:数据 关系 中继器 | 更新日期: 2023-09-27 18:16:38

我试图设置一个嵌套中继器的场景,其中我有多个不同的类别,在它们下面显示多个子类别。问题是,父表和子表匹配类别id,它返回所有表类别所需的结果,但这一个。由于某种原因,在这种情况下,我只从表A中获得textCategory1作为页头文本,并从表b中获得该类别中的所有子文本,我检查了sp,并且所有三个都被传递。

父表A
标题文字:TextCategory1 |类别:13

标题文本:TextCategory2 |类别:73

标题文本:TextCategory3 |类别:14

子表B题文本:childText|类别:13 |父类别:Null

标题文本:childText|类别:74|父类别:2

标题文本:childText|类别:14|父类别:2

这是我使用的数据关系,我将主重复器绑定到第一个表的结果,而子重复器绑定在绑定到数据流的主项目中。创建数据关系的child - view

ds.Relations.Add(new DataRelation("Category_ID", ds.Tables[0].Columns["Category_ID"],
ds.Tables[1].Columns["Category_ID"]));
MasterRep.DataSource = ds.Tables[0];
MasterRep.DataBind();

MasterRep Item DataBound:

 DataRowView drv = e.Item.DataItem as DataRowView;
 Repeater ChildRep = e.Item.FindControl("ChildRep") as Repeater;
 if (drv != null && ChildRep != null)
 {
    ChildRep.DataSource = drv.CreateChildView("Category_ID");
    ChildRep.DataBind();
 }

谁能告诉我为什么在这种情况下不能从表a中获得所有三个策略文本行?

多对多父/子中继器,数据关系c#

有一些事情是没有意义的,并且很可能导致你的问题。

(我假设子行的父类别是将子行连接到父行(使用父行的类别ID)。)

  1. 表B中的第一个项目(类别13)的父类别为null。这就意味着它没有父结点。类别ID与表a中第一个项目的类别ID相同。
  2. 第2项&表B中的3的父类为2。表A中没有具有此ID的项,这实际上意味着这两个子项没有父项。
  3. 表B中的Item 3与表a中的Item 3具有相同的ID。

另外,您可以编辑您的答案,以包括MasterRep OnItemDatabound()方法的完整代码吗?

事实证明代码正常运行,但数据不正确,一旦我纠正了这一点,我的代码正常运行。在表A中,每个类别都表示甚至具有父类别的类别,然后根据表b的类别进行匹配。这实际上在我的代码中使用数据关系和项目绑定子视图正确运行。我的方法是基于这个非常有用的链接mikesdotnetting.com/Article/57/..但是泰勒为许多有很多孩子的父母设计的。