c#嵌套数据表/设置为n个数字级别

时间:2014-10-16 22:29:08

标签: c# recursion dataset master-detail datarow

我想使用链接在一起的数据表或数据集建立一个如下所示的关系。

给出嵌套的物料清单/型号:

  

一个。使项目(A)包括(这是基础/孩子的孩子)

     
    
        
  1. 购买商品(aa)
  2.     
  3. 购买商品(bb)
  4.     
  5. 购买商品(cc)
  6.        
     

B中。使项目(B)包括(这是(A)的父项,(C)的子项)

     
    
        
  1. 购买商品(dd)
  2.     
  3. 制作项目(A)
  4.        
     

℃。使项目(C)包括(这是(B)的父母和父母 - 父母(A))

     
    
        
  1. 制作项目(B)
  2.        

在此示例中,层次结构深度为3个元素。在顶层,make item(C)的父 - >制作项目(B) - >制作物品(A),由没有孩子的购买物品组成。

我的目标是使用这些关系创建数据表或数据集。我创建了一个方法来遍历一个级别的元素,如果它包含一个make项,则再次调用自己将make项目作为父项传递。例如:

.
.
.
//iterate through parent, if child-element is make then get the bill of materials for the child.
  DataTable CurLevelBOM; //has the current level bill of materials (C) above
  DataSet Children = new DataSet();


  foreach(DataRow BOMrow in CurLevelBOM){
   if (BOMRow["Make"].ToString() = "Y"){

      //Get the Bill of materials for this element
      Children.Tables.Add(this.getChild(BOMrow).tables.thisLevelBom);  
    }
  }
.
.
.
private DataSet getChild(DataRow ChildMakeItem){
   DataSet DataSetToReturn = new DataSet();
   DataSet Child = new DataSet();
   DataTable thisLevelBom = BomTableAdapter.getdata(ChildMakeItem["Item"].ToString();

   foreach(DataRow row in thisLevelBom){
      if(row["Make"].ToString() == "Y"){
         Child = getChild(row);
         DataSetToReturn.Tables.Add(Child.Tables.thisLevelBom);  //add this bom to 
      } else {
       /// this row is not a make item and shouldn't get children
      }
  }
}

我被卡住了 - 我不确定DataSet是否可以有多个版本的同一个表 - 在这种情况下是一个物料清单。我也没有意识到使用(C)对象设置(B)项目与(A)项目之间关系的方法。

或者,如果你有不同的方法,我全都是耳朵:) TYIA。

0 个答案:

没有答案