WPF中TreeView的数据帮定

一、静态
 private void BindTreeView2()
        {
            TreeViewItem item1 = new TreeViewItem() { Header = "中国" };
            TreeViewItem item11 = new TreeViewItem() { Header = "山东省" };
            item11.Items.Add("济南市");
            item11.Items.Add("青岛市");
            item11.Items.Add("淄博市");
            item11.Items.Add("德州市");

            item1.Items.Add(item11);
            item1.Items.Add("北京市");
            item1.Items.Add("天津市");
            TreeViewItem item2 = new TreeViewItem() { Header = "美国" };
            item2.Items.Add("加利福尼亚");
            item2.Items.Add("内华达");
            item2.Items.Add("佛罗里达");
            item2.Items.Add("德克萨斯");
            treeView1.Items.Add(item1);
            treeView1.Items.Add(item2);
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            BindTreeView2();
        }
        private void treeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            string dd = treeView1.SelectedItem as string;
            MessageBox.Show(dd);
       }

二、数据库绑定

1、后台代码:
//外网数据源******************
 SqlConnection WwoleConnection = new SqlConnection("Server=服务器IP Catalog=数据库名 ; User ID=用户名; Password=密码;");
        SqlCommand WwoleCommand = new SqlCommand();
        //****************************
        /// <summary>
        /// 节点类
        /// </summary>
        internal class PropertyNodeItem
        {
            public string Icon { get; set; }
            public string EditIcon { get; set; }
            public string DisplayName { get; set; }
            public string Name { get; set; }
            public int id { get; set; }
            public int parentId { get; set; }
            public bool IsExpanded { get; set; }
            public List<PropertyNodeItem> Children { get; set; }
            public PropertyNodeItem()
            {
                Children = new List<PropertyNodeItem>();
            }
        }

        //无限接循环子节点添加到根节点下面
        private void ForeachPropertyNode(PropertyNodeItem node, int pid)
        {
            DataTable Db = new DataTable();
            //查询数据库********************
            WwoleConnection.Open();
            SqlCommand Wwcmd = new SqlCommand("", WwoleConnection);
            string sql = "select * from TreeView";
            Wwcmd.CommandText = sql;

            if (null != Wwcmd.ExecuteScalar())
            {
                SqlDataReader dr;
                dr = Wwcmd.ExecuteReader();
                Db.Load(dr);
            }
            //**********************************************************
            WwoleConnection.Close();

            DataTable dtDict = Db;
            DataView dvDict = dtDict.DefaultView;
            dvDict.RowFilter = "parent_id=" + pid;
            if (dvDict.Count > 0)
            {
                foreach (DataRowView view in dvDict)
                {
                    int id = Convert.ToInt32(view["id"].ToString());
                    string name = view["name"].ToString();
                    int parentId = Convert.ToInt32(view["parent_id"].ToString());
                    PropertyNodeItem childNodeItem = new PropertyNodeItem()
                    {
                        DisplayName = name,
                        Name = name,
                        id = id,
                        parentId = parentId,
                        IsExpanded = false
                    };
                    ForeachPropertyNode(childNodeItem, id);
                    node.Children.Add(childNodeItem);
                }
            }
        }
 
        //根节点添加到treeVIew中
        private void loadTree()
        {
            tvProperties.Items.Clear();//加载根节点前先清除Treeview控件项
            List<PropertyNodeItem> itemList = new List<PropertyNodeItem>();
            DataTable Db = new DataTable();
            //查询数据库********************
            WwoleConnection.Open();
            SqlCommand Wwcmd = new SqlCommand("", WwoleConnection);
            string sql = "select * from TreeView Where parent_id=0";
            Wwcmd.CommandText = sql;

            if (null != Wwcmd.ExecuteScalar())
            {
                SqlDataReader dr;
                dr = Wwcmd.ExecuteReader();
                Db.Load(dr);
            }
            //**********************************************************
            WwoleConnection.Close();

            DataTable dt = Db;
            DataView dv = dt.DefaultView;
            //dv.RowFilter = "parent_id=0";
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                PropertyNodeItem node = new PropertyNodeItem()
                {
                    DisplayName = dv[i].Row["name"].ToString(),
                    Name = dv[i].Row["name"].ToString(),
                    id = Convert.ToInt32(dv[i].Row["id"].ToString()),
                    parentId = Convert.ToInt32(dv[i].Row["parent_id"].ToString()),
                    IsExpanded = true
                };
                int id = Convert.ToInt32(dv[i]["id"].ToString());
                int pid = Convert.ToInt32(dv[i]["parent_id"].ToString());
                ForeachPropertyNode(node, id);
                itemList.Add(node);
            }
            this.tvProperties.ItemsSource = itemList;
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            loadTree();
        }
        private void tvProperties_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
            PropertyNodeItem item = this.tvProperties.SelectedItem as PropertyNodeItem;
            string nodeText = item.Name;
            MessageBox.Show(nodeText);
        }


2、前台界面代码:
<TreeView Height="264" x:Name="tvProperties" Width="220" SelectedItemChanged="tvProperties_SelectedItemChanged">
            <TreeView.ItemContainerStyle>
                <Style TargetType="{x:Type TreeViewItem}">
                    <Setter Property="IsExpanded" Value="{Binding IsExpanded}"></Setter>
                </Style>
            </TreeView.ItemContainerStyle>
            <TreeView.ItemTemplate>
                <HierarchicalDataTemplate  ItemsSource="{Binding Path=Children}">
                    <StackPanel Orientation="Horizontal">
                        <Image VerticalAlignment="Center" Source="{Binding Icon}" Width="16" Height="16" Margin="0,0,2,2"></Image>
                        <TextBlock VerticalAlignment="Center" Name="nodeName" Text="{Binding DisplayName}"></TextBlock>
                        <Image VerticalAlignment="Center" Source="{Binding EditIcon}" Margin="2,0,0,0"></Image>
                        <StackPanel.ToolTip>
                            <TextBlock VerticalAlignment="Center" Text="{Binding Name}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock>
                        </StackPanel.ToolTip>
                    </StackPanel>
                </HierarchicalDataTemplate>
            </TreeView.ItemTemplate>
        </TreeView>


3、数据库表结构及效果图
图片
图片

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值