Hello Stackoverflow撰稿人,
我有一个组合框“CmboExpenseType”,目前没有数据。
我还有一个Tree View“TVProperties”,其中包含以下数据。
我想从这个树视图中获取父节点到“CmboExpenseType”。
因此,当用户点击组合框时,他们将看到父节点“收入,娱乐,交通和其他”,然后我可以编程子节点进入另一个组合框。
我 不 试图将组合框放入我的树视图中。
我此时只尝试过这段代码。但它无济于事。
CmboExpenseType.Items.Add(TVProperties);
将节点移动到列表或字典中是否值得?
我对获取所有父节点后的可能方法有一些想法,比如可能的foreach循环。我只是坚持将树视图中的数据添加到我的组合框中。
任何帮助都会很棒。如果需要更多信息,请不要犹豫告诉我。
答案 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;
}