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

C# 使用树状视图数据和同步选择填充组合框,c#,winforms,combobox,treeview,C#,Winforms,Combobox,Treeview,大家好,Stackoverflow撰稿人 我有一个组合框“CmboExpenseType”,目前没有数据 我还有一个树视图“TVProperties”,其中包含以下数据 我想将父节点从这个树状视图放到“CmboExpenseType”中 因此,当用户单击组合框时,他们将看到父节点“收入、娱乐、交通和其他”,然后我可以编程子节点进入另一个组合框 我正在而不是尝试将组合框添加到我的树视图中 我现在只试过这个代码。但它毫无用处 CmboExpenseType.Items.Add(TVPropert

大家好,Stackoverflow撰稿人

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

我还有一个树视图“TVProperties”,其中包含以下数据

我想将父节点从这个树状视图放到“CmboExpenseType”中

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

我正在而不是尝试将组合框添加到我的树视图中

我现在只试过这个代码。但它毫无用处

CmboExpenseType.Items.Add(TVProperties);
是否值得我将节点移动到列表或字典中

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


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

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

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

CmboExpenseType.DataSource = list;
var list=TVProperties.Nodes
.Cast()
.选择(x=>x.Text)
.ToList();
CmboExpenseType.DataSource=列表;

首先不确定如何填充
树视图
,只需一级节点数据即可同时填充
组合框

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

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

CmboExpenseType.DataSource = list;
var list=TVProperties.Nodes
.Cast()
.选择(x=>x.Text)
.ToList();
CmboExpenseType.DataSource=列表;

首先不确定如何填充
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; 
}

正如您可能已经发现的那样,存在着这样的问题,他们无法共享数据源

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

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; 
}

如何填充treeview?为什么不能同时填充组合框?如何填充treeview?为什么不能同时填充组合框?我填充组合框的方式与使用组合框或在选项卡控件上添加新选项卡的方式相同。更新:谢谢Sriram,您的代码用于显示我的父节点。@LoganWalker很高兴它有帮助。你需要更多帮助吗?我填充它的方式与使用组合框或在选项卡控件上添加新选项卡的方式相同。更新:谢谢Sriram,您的代码用于显示我的父节点。@LoganWalker很高兴它有帮助。你需要更多帮助吗?谢谢你,弗雷德,我已经尝试过了,它显示了我的子节点,这可以作为我问题的第二部分。好的,很抱歉我误读了treeview图像。我将更新答案以反映与根节点的绑定不需要@Fred你在第二部分帮助了我,Sriram在第一部分帮助了我。谢谢你Fred我尝试了这个,它显示了我的子节点,这可以用作我问题的第二部分。好的,很抱歉我误读了treeview图像。我将更新答案,以反映对根节点的绑定不需要@Fred你在第二部分帮助了我,Sriram在第一部分帮助了我。