使用树视图填充组合框数据和同步选择

时间:2014-08-14 20:07:37

标签: c# winforms combobox treeview

Hello Stackoverflow撰稿人,

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

我还有一个Tree View“TVProperties”,其中包含以下数据。

我想从这个树视图中获取父节点到“CmboExpenseType”。

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

试图将组合框放入我的树视图中。

我此时只尝试过这段代码。但它无济于事。

CmboExpenseType.Items.Add(TVProperties);

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

CmboExpenseType.DataSource = list;

不确定如何首先填充TreeView,只使用第一级节点数据就可以轻松填充ComboBox

答案 1 :(得分:0)

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

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

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

然后在组合的选定值更改中,只需拉出所选值:

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

    TVProperties.SelectedNode = node; 
}