IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 树形控件Tree View的使用 -> 正文阅读

[移动开发]树形控件Tree View的使用

一,项目需求。

在一些项目中,需要用到树形控件。一些项目中有商品的分类选择,有商品是属于电子产品,有些商品则属于服装,这时候就可以用到树形控件(Tree View),如下图:

二,开始构建Tree View

1. xaml页面中声明一个Tree View:

2. xaml.cs页面中:

?(1)构建实体

        /// <summary>
        /// 1、构建实体
        /// </summary>
        public class ProjectModule
        {
            public int ID { get; set; }
            public string menuName { get; set; }
            public string menucode { get; set; }
            public string menuicon { get; set; }
            public int ParentId { get; set; }
            public List<ProjectModule> Nodes { get; set; }
            public ProjectModule()
            {
                //创建当前节点
                this.Nodes = new List<ProjectModule>();
                //当前父级ID为零
                this.ParentId = 0;//主节点的父id默认为0
            }
        }

(2)绑定数据:这里的数据通过DataTable获取数据库的数据,声明dt通过for循环绑定数据的每一条数据。

        /// <summary>
        /// 2、绑定数据
        /// </summary>
        /// <returns></returns>
        public List<ProjectModule> GetProject()
        {
            //获取操作模块列表
            DataTable dt = myClient.TreeViewClient().Tables[0];
            List<ProjectModule> dplst = new List<ProjectModule>();
            //循环差集生成菜单
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                ProjectModule addProjectModule = new ProjectModule();
                addProjectModule.ID = Convert.ToInt32(dt.Rows[i]["clientClassID"]);
                addProjectModule.menuName = dt.Rows[i]["name"].ToString().Trim();
                addProjectModule.menucode = dt.Rows[i]["code"].ToString().Trim();
                addProjectModule.menuicon = dt.Rows[i]["icon"].ToString().Trim();
                addProjectModule.ParentId = Convert.ToInt32(dt.Rows[i]["f_id"]);
                if (Convert.ToInt32(dt.Rows[i]["f_id"]) == 0 && dt.Rows[i]["icon"] == null)
                {
                    //一级
                    addProjectModule.menuicon = "/Images/png-1692.ico";
                }
                else
                {
                    //二级菜单
                    addProjectModule.menuicon = "/Images/png-1674.ico";
                }
                //把实体添加到列表中
                dplst.Add(addProjectModule);
            }
            return dplst;
        }

?(3)递归生成树形数据:这一步操作决定了数据作为菜单时是几级菜单

        /// <summary>
        /// 3、递归生成树形数据
        /// </summary>
        /// <param name="modularID"></param>
        /// <param name="Nodes"></param>
        /// <returns></returns>
        public List<ProjectModule> GetTrees(int ID, List<ProjectModule> Nodes)
        {
            //实例化一个主节点,并且进行linq条件查询,为tolist列表形式。
            List<ProjectModule> MainNodes = Nodes.Where(x => x.ParentId == ID).ToList<ProjectModule>();
            //实例化一个其他节点,并且进行linq条件查询,为tolist列表形式。
            List<ProjectModule> OtherNodes = Nodes.Where(x => x.ParentId != ID).ToList<ProjectModule>();
            foreach (ProjectModule pro in MainNodes)
            {
                //GetTrees递归赋值
                pro.Nodes = GetTrees(pro.ID, OtherNodes);
            }
            //返回主节点,跳出递归
            return MainNodes;
        }

(4)最后把数据绑定到树形控件Tree View,因为要一打开页面就显示树形控件的数据,所以在页面加载时就要绑定数据。

        /// <summary>
        /// 页面加载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            this.NavigationTree.ItemsSource = GetTrees(0, GetProject());
        }

(5)在数据库中的查询语句:通过父ID(f_ID)来判断查询

--树形控件(数据生成)
IF(@type='UserControl_Loaded_TreeViewCommodity')
BEGIN
SELECT  modularID, 
        RTRIM(modularName) AS name, 
		RTRIM(modularCode) AS code, 
		RTRIM(modularIcon) AS icon, 
		f_ID
FROM    S_Modular
WHERE f_ID>0
UNION
SELECT  modularID, 
        RTRIM(modularName) AS name, 
		RTRIM(modularCode) AS code, 
		RTRIM(modularIcon) AS icon, 
		f_ID
FROM    S_Modular
WHERE modularID NOT IN(SELECT  modularID
FROM    S_Modular
WHERE f_ID>0)
END

?三,点击树形菜单筛选查询。功能:当就想看电子产品分类有多少商品时,通过点击电子产品的菜单栏筛选表格,只显示属于电子产品分类的产品。

?

通过事件MouseLeftButtonDown(鼠标左键按下事件)实现:?

        /// <summary>
        /// 鼠标左键按下事件(Image,TextBlock)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TextBlock_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            try
            {
                //获取当前TextBlock
                TextBlock txtText = sender as TextBlock;
                strText = txtText.Text;
                if (strText != "客户分类")
                {
                    int intclientClassID = (int)txtText.Tag;

                    DataTable dtCo = myClient.TVWDClient(intclientClassID).Tables[0];
                    //把获取到的数据绑定到表格
                    dgClient.ItemsSource = dtCo.DefaultView;
                    ConsumptionPager.ShowPages(dgClient, dtCo);
                }
                else
                {
                    GetData();
                }
            }
            catch (System.Exception)
            {
                return;
            }
        }

声明一个TextBlock,获取点击的菜单栏是不是“客户分类”来进行判断,因为客户分类是不用进行筛选查询的,若点击的不是“客户分类”,就把获取到商品分类ID(clientClassID)作为条件进行筛选查询。?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:44:56  更:2022-03-22 20:45:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 20:13:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码