如何将项目添加到属于一起的TreeView

时间:2013-04-05 15:20:21

标签: c# list datatable treeview

我已经坚持这个问题好几周了,所以它开始让我烦恼..

我的数据库中有一个包含以下列的表:

  • 订单ID
  • 产品ID
  • 子产品ID 1
  • 子产品ID 2
  • 等...

它们都属于1个订单

现在我必须收集这些ID,然后使用它们从我的数据库中获取正确的值

所以,让我们说

  • 产品ID ==薯条
    • 子产品ID 1 == ketchup
    • 子产品ID 2 == mayo

这是棘手的部分。

在此表中,ORDER ID可以是3行,5或6等相同:

  • 订单ID 27,其中包括:与mayo和番茄酱的薯条
  • 订单ID 27,其中包含:带有mayo的鸡翅
  • 订单ID 27,其中包含:带番茄酱的汉堡
  • 等。

现在我怎样才能以正确的顺序将它们放在TreeView中?

  • 薯条
    • 番茄酱
    • 梅奥
  • 鸡翅
    • 梅奥
  • 汉堡
    • 番茄酱

我尝试了许多内容,例如DataTableDictionaryList,甚至还有tuple等等。

但是因为我真的很困惑我应该使用什么。或者我应该将TreeView更改为替代方案吗?

我真的看不到森林里的树木了......堆栈是我最后的希望lol

1 个答案:

答案 0 :(得分:0)

当项目包含您要显示的子集合时,将使用树视图。据我了解您当前的表/类结构,子(SubProducts)作为属性存储在主ProductID记录中,而不是作为记录的集合。

如果您希望树视图正常工作,则需要将数据从sql表转换为此结构。

public class Product
{
  public int OrderID {get;set;}
  public int ProductID {get;set;}
  public string ProductName {get;set;}
  public List<SubProduct> Children {get;set;}  // the magic sauce in this solution
}

public class SubProduct
{
  public int SubProductID {get;set;}
  public string SubProductName {get;set;}
}

或者你可以为ListBox / ListView编写一个DataTemplate,它将知道如何显示SubProducts。该解决方案的缺点是您将无法单独选择SubProducts,只能选择整个产品。