【问题标题】:Populate a Combo Box with a Tree View data and sync selection使用树视图数据和同步选择填充组合框
【发布时间】:2014-08-14 20:07:36
【问题描述】:

您好 Stackoverflow 贡献者,

我有一个组合框“CmboExpenseType”,目前没有数据。

我还有一个包含以下数据的树视图“TVProperties”。

我想将此树视图中的父节点放入“CmboExpenseType”。

因此,当用户单击组合框时,他们将看到父节点“收入、娱乐、交通和其他”,然后我可以对子节点进行编程以进入另一个组合框。

不是试图将组合框添加到我的树视图中。

我目前只尝试过这段代码。但这无济于事。

CmboExpenseType.Items.Add(TVProperties);

将节点移动到列表或字典中是否值得?

我对获取所有父节点后的可能方式有一些想法,例如可能的 foreach 循环。我只是坚持将树视图中的数据添加到我的组合框中。

任何帮助都会很棒。如果需要更多信息,请随时告诉我。

【问题讨论】:

  • 如何填充树视图?为什么不能同时填充组合框?

标签: c# winforms combobox treeview


【解决方案1】:

如果要从现有的 TreeView 中获取节点文本,可以执行以下操作

var list = TVProperties.Nodes
                       .Cast<TreeNode>()
                       .Select(x=> x.Text)
                       .ToList();

CmboExpenseType.DataSource = list;

不确定如何首先填充TreeView,仅使用一级节点数据同时填充ComboBox 会很容易。

【讨论】:

  • 我填充它的方式与使用组合框或在选项卡控件上添加新选项卡的方式相同。更新:谢谢 Sriram,您的代码可以显示我的父节点。
  • @LoganWalker 很高兴它有帮助。您需要更多帮助吗?
【解决方案2】:

您可能已经发现,no databinding for a treeview 因此他们无法共享数据源。

要在组合更改时更改树视图,我们可以使用一点数据绑定魔法:

private void Form1_Load(object sender, EventArgs e)
{
    var nodes = TVProperties.Nodes;
    CmboExpenseType.DisplayMember = "Text";
    CmboExpenseType.DataSource = nodes;
}

然后在combo的选中值变化上,拉出选中值即可:

private void CmboExpenseType_SelectedIndexChanged(object sender, EventArgs e)
{
    var node = CmboExpenseType.SelectedItem as TreeNode;
    if(node == null)
        return;

    TVProperties.SelectedNode = node; 
}

【讨论】:

  • 谢谢 Fred 我已经尝试过了,它显示了我的子节点,这可以用作我问题的第二部分。
  • 好的,对不起,我看错了树视图图像。我将更新答案以反映与根节点的绑定
  • 不需要@Fred,你帮助我完成了第二部分,而 Sriram 帮助了我完成了第一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多