绑定TreeView

 /// <summary>
        /// 绑定TreeView(利用TreeNodeCollection)
        /// </summary>
        /// <param name="tnc">TreeNodeCollection(TreeView的节点集合)</param>
        /// <param name="pid_val">父id的值</param>
        /// <param name="id">数据库 id 字段名</param>
        /// <param name="pid">数据库 父id 字段名</param>
        /// <param name="text">数据库 文本 字段值</param>
        public void Bind_Tv(DataTable dt, TreeNodeCollection tnc, string pid_val, string id, string pid, string text,string type)
        {
            DataView dv = dt.DefaultView; ;//将DataTable存到DataView中,以便于筛选数据
            TreeNode tn;//建立TreeView的节点(TreeNode),以便将取出的数据添加到节点中
            //以下为三元运算符,如果父id为空,则为构建“父id字段 is null”的查询条件,否则构建“父id字段=父id字段值”的查询条件
            string filter = string.IsNullOrEmpty(pid_val) ? pid + " is null" : string.Format(pid + "='{0}'", pid_val);
            dv.RowFilter = filter;//利用DataView将数据进行筛选,选出相同 父id值 的数据
            foreach (DataRowView drv in dv)
            {
                tn = new TreeNode();//建立一个新节点(学名叫:一个实例)
                tn.Name = drv[id].ToString();//节点的Value值,一般为数据库的id值
                tn.Text = drv[text].ToString();//节点的Text,节点的文本显示
                tn.Tag = drv[type].ToString();
                tnc.Add(tn);//将该节点加入到TreeNodeCollection(节点集合)中
                Bind_Tv(dt, tn.Nodes, tn.Name, id, pid, text,type);//递归(反复调用这个方法,直到把数据取完为止)
            }
        }

调用:
fd.Bind_Tv(NP_LocalProjectMan.TreeData(dt,treeView1.Nodes[0].Nodes, "1", "ID", "ParentID", "FileName","FileType");

 

 

        public void Bind_Tv(DataTable dt, TreeNodeCollection tnc, string id,  string text, string mark)
        {
            TreeNode tn;//建立TreeView的节点(TreeNode),以便将取出的数据添加到节点中
           
            foreach (DataRow dr in dt.Rows)
            {
                tn = new TreeNode();//建立一个新节点(学名叫:一个实例)
                tn.Name = dr[id].ToString();//节点的Value值,一般为数据库的id值
                tn.Text = dr[text].ToString();//节点的Text,节点的文本显示
                tn.Tag = dr[mark].ToString();
                tnc.Add(tn);//将该节点加入到TreeNodeCollection(节点集合)中
            }
        }

调用:
Bind_Tv(dt, treeView1.Nodes[0].Nodes, "ID", "Name", "ModelNO");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现WPF ComboBox下拉绑定Treeview功能,可以参考以下步骤: 1. 创建一个ViewModel,其中包含一个ObservableCollection用于绑定ComboBox的ItemsSource,同时也包含一个ObservableCollection用于绑定TreeView的ItemsSource。 2. 在ViewModel的构造函数中,初始化ComboBox的ItemsSource和TreeView的ItemsSource。 3. 在ComboBox的SelectedIndexChanged事件中,获取选中项的子节点数据,将其添加到TreeView的ItemsSource中。 4. 在XAML中,使用ComboBox和TreeView控件,并将它们的ItemsSource绑定到ViewModel中的相应属性。 下面是一个简单的示例代码: ViewModel: ```c# public class MainViewModel : INotifyPropertyChanged { private ObservableCollection<string> _comboBoxItemsSource; private ObservableCollection<string> _treeViewItemsSource; public MainViewModel() { // 初始化ComboBox的ItemsSource ComboBoxItemsSource = new ObservableCollection<string> { "Node1", "Node2", "Node3" }; // 初始化TreeView的ItemsSource TreeViewItemsSource = new ObservableCollection<string> { "Root" }; } public ObservableCollection<string> ComboBoxItemsSource { get => _comboBoxItemsSource; set { _comboBoxItemsSource = value; OnPropertyChanged(); } } public ObservableCollection<string> TreeViewItemsSource { get => _treeViewItemsSource; set { _treeViewItemsSource = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ``` XAML: ```xml <Window.DataContext> <local:MainViewModel /> </Window.DataContext> <Grid> <ComboBox ItemsSource="{Binding ComboBoxItemsSource}" SelectedIndex="0" Width="100" /> <TreeView ItemsSource="{Binding TreeViewItemsSource}" Margin="0,30,0,0"> <TreeView.ItemTemplate> <HierarchicalDataTemplate ItemsSource="{Binding Children}"> <TextBlock Text="{Binding Name}" /> </HierarchicalDataTemplate> </TreeView.ItemTemplate> </TreeView> </Grid> ``` 在ComboBox的SelectedIndexChanged事件中,获取选中项的子节点数据,将其添加到TreeView的ItemsSource中。 ```c# private void ComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { var selectedItem = e.AddedItems[0] as string; // 根据选中项获取子节点数据 var children = GetChildren(selectedItem); // 将子节点数据添加到TreeView的ItemsSource中 var root = TreeViewItemsSource[0]; if (root == "Root") { TreeViewItemsSource.Clear(); TreeViewItemsSource.Add(new Node { Name = "Root", Children = children }); } else { var node = TreeViewItemsSource[0] as Node; node.Children = children; } } private ObservableCollection<Node> GetChildren(string selectedItem) { // TODO: 根据选中项获取子节点数据 return new ObservableCollection<Node> { new Node { Name = $"{selectedItem}-1" }, new Node { Name = $"{selectedItem}-2" }, new Node { Name = $"{selectedItem}-3" } }; } public class Node { public string Name { get; set; } public ObservableCollection<Node> Children { get; set; } } ``` 以上示例代码仅供参考,实现过程中可能需要根据具体需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值