全面:玄龙戏珠无级树(五莲花姊妹兄弟完美自定义含图标)总结

来源:互联网 发布:linux uname 编辑:程序博客网 时间:2024/06/12 01:25
全面:玄龙戏珠无级树(五莲花姊妹兄弟完美自定义含图标)总结

 

/*筛选篇*/        private void 树开花()        {            树.Nodes.Clear(); string[] 重组表列 = null; List<int[,]> 图标序集 = new List<int[,]>();/* List<int[,]> 图标序集 = new List<int[,]>(new int[][,] { new int[,] { { 0, 16 } } });*/            Func<DataTable> 数据表 = () => 加载数据(); DataTable 表 = 数据表.Invoke();            if (表.TableName == "人员") { 重组表列 = new string[] { "归属", "姓名", "生日" }; 图标序集.Add(new int[,] { { 0, 16 }, { 5, 15 } }); }            if (表.TableName == "提示") { 重组表列 = new string[] { "提示内容", "心情日记" }; 图标序集.Add(new int[,] { { 16, 18 } }); }            if (表.TableName == "文摘") { 重组表列 = new string[] { "总类", "别类", "子类", "标题", "内容" }; 图标序集.Add(new int[,] { { 25, 21 } }); }            this.Invoke(new Action(() =>            {                DataTable 树表 = 表.DefaultView.ToTable(true, 重组表列), 根表 = 树表.DefaultView.ToTable(true, 重组表列[0]);                foreach (DataRow 数据列 in 根表.Rows)/*父龙*/                {                    Func<TreeNode, DataRow, int, List<int[,]>, TreeNode> 成节 = (上层节, 数据, 位置, 节图标序集) => 玄龙戏珠无级树(上层节, 数据, 位置, 节图标序集);                    List<TreeNode> 子节 = new List<TreeNode>(), 节存 = new List<TreeNode>();                    DateTime 日期; DataRow[] 子节数据 = null; TreeNode 节点 = new TreeNode();                    if (表.TableName == "人员名称" && 图标序集.Count > 0) 图标序集[0][0, 0] = 0;/*条件自编*/                    if (图标序集.Count > 0) { 节点.ImageIndex = 图标序集[0][0, 0]; 节点.SelectedImageIndex = 图标序集[0][0, 1]; }                    节点.Text = 数据列[0].ToString(); 节点.Tag = 数据列;                    树.Nodes.Add(节点); 子节.Add(节点);                    if (!DateTime.TryParse(节点.Text, out 日期)) 子节数据 = 树表.Select(重组表列[0] + "='" + 节点.Text + "'");                    foreach (DataRow 元素 in 子节数据)/*母龙=同步*/                    {                        for (int 级 = 1, 列数 = 重组表列.Length; 级 < 列数; 级++)/*子龙*/                        {                            bool 节控 = false; string 节路径 = "";                            if (子节.Count < 列数) { 节点 = 成节(节点, 元素, 级, 图标序集); 子节.Add(节点); }/*龙珠*/                            else                            {                                for (int 数 = 0; 数 <= 级; 数++) { if (节路径 == "") 节路径 = 元素[数].ToString(); else 节路径 += "\\" + 元素[数].ToString(); }                                foreach (TreeNode 节数据 in 节存) { if (节路径 == 节数据.FullPath) { 子节[级] = 节数据; 节控 = false; break; } else 节控 = true; }                                if (节路径 != 子节[级].FullPath || 节控)/*if (元素[级].ToString() != 子节[级].Text || 节控)*/                                {                                    节存.AddRange(子节); 节存 = 节存.Distinct().ToList(); 节存 = 节存.Where(筛选 => 筛选.Level < 列数 - 1).ToList();                                    节点 = 成节(子节[级 - 1], 元素, 级, 图标序集); 子节[级] = 节点;                                } } } } } }));        }        private TreeNode 玄龙戏珠无级树(TreeNode 节点, DataRow 子节, int 级, List<int[,]> 图标序集)        {            TreeNode 加子节 = new TreeNode();            加子节.Tag = 子节; 加子节.Text = 子节[级].ToString();            if (图标序集.Count > 0) { 加子节.ImageIndex = 图标序集[0][0,0]; 加子节.SelectedImageIndex = 图标序集[0][0,1]; }            节点.Nodes.Add(加子节);            return 加子节;        }        private void 加载树图标集()        {            ImageList 树图标集 = new ImageList();            树图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\树图标集\\icolicious.ico"));            树图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\树图标集\\观世音菩萨2.bmp"));            树.ImageList = 树图标集;        }/*分组篇*/        private void 树开花()        {            树.Nodes.Clear(); string[] 重组表列 = null; List<int[,]> 图标序集 = new List<int[,]>();/* List<int[,]> 图标序集 = new List<int[,]>(new int[][,] { new int[,] { { 0, 16 } } });*/            Func<DataTable> 数据表 = () => 加载数据(); DataTable 表 = 数据表.Invoke();            if (表.TableName == "人员") { 重组表列 = new string[] { "归属", "姓名", "生日" }; 图标序集.Add(new int[,] { { 0, 16 }, { 5, 15 } }); }            if (表.TableName == "提示") { 重组表列 = new string[] { "提示内容", "心情日记" }; 图标序集.Add(new int[,] { { 16, 18 } }); }            if (表.TableName == "文摘") { 重组表列 = new string[] { "总类", "别类", "子类", "标题", "内容" }; 图标序集.Add(new int[,] { { 25, 21 } }); }            this.Invoke(new Action(() =>            {                DataTable 树表 = 表.DefaultView.ToTable(true, 重组表列), 根表 = 树表.DefaultView.ToTable(true, 重组表列[0]);                foreach (DataRow 数据列 in 根表.Rows)/*父龙*/                {                    Func<TreeNode, DataRow, int, List<int[,]>, TreeNode> 成节 = (上层节, 数据, 位置, 节图标序集) => 玄龙戏珠无级树(上层节, 数据, 位置, 节图标序集);                    List<TreeNode> 子节 = new List<TreeNode>(); List<TreeNode>[] 节存 = new List<TreeNode>[重组表列.Length - 2]; for (int 级 = 0, 列数 = 重组表列.Length - 2; 级 < 列数; 级++) { 节存[级] = new List<TreeNode>(); }                    DateTime 日期; DataRow[] 子节数据 = null; TreeNode 节点 = new TreeNode();                    if (表.TableName == "人员名称" && 图标序集.Count > 0) 图标序集[0][0, 0] = 0;/*条件自编*/                    if (图标序集.Count > 0) { 节点.ImageIndex = 图标序集[0][0, 0]; 节点.SelectedImageIndex = 图标序集[0][0, 1]; }                    节点.Text = 数据列[0].ToString(); 节点.Tag = 数据列;                    树.Nodes.Add(节点); 子节.Add(节点);                    if (!DateTime.TryParse(节点.Text, out 日期)) 子节数据 = 树表.Select(重组表列[0] + "='" + 节点.Text + "'");                    foreach (DataRow 元素 in 子节数据)/*母龙=同步*/                    {                        for (int 级 = 1, 列数 = 重组表列.Length; 级 < 列数; 级++)/*子龙*/                        {                            bool 节控 = false; string 节路径 = "";                            if (子节.Count < 列数) { 节点 = 成节.Invoke(节点, 元素, 级, 图标序集); 子节.Add(节点); if (级 < 列数 - 1) 节存[级 - 1].Add(子节[级]); }/*龙珠*/                            else                            {                                for (int 数 = 0; 数 <= 级; 数++) { if (节路径 == "") 节路径 = 元素[数].ToString(); else 节路径 += "\\" + 元素[数].ToString(); }                                if (级 < 列数 - 1) foreach (TreeNode 节数据 in 节存[级 - 1]) { if (节路径 == 节数据.FullPath) { 子节[级] = 节数据; 节控 = false; break; } else 节控 = true; }                                if (节路径 != 子节[级].FullPath || 节控)                                {                                    节点 = 成节.Invoke(子节[级 - 1], 元素, 级, 图标序集); 子节[级] = 节点;                                    if (级 < 列数 - 1)                                    {                                        节存[级 - 1].Add(子节[级]); 节存[级 - 1] = 节存[级 - 1].Distinct().ToList();                                        节存[级 - 1] = 节存[级 - 1].Where(筛选 => 筛选.Level < 列数 - 1).ToList();                                    }                                } } } } } }));        }/*核心篇分类分组=推荐*/        private void 玄龙戏珠无级树()/*之前写的用筛选已经舍弃,采用构思设计核心实现,同时采用分类分组提高运行速度,生树受影响主要在读数据到表部分.*/        {            this.Invoke(new Action(() =>            {                ImageList 图标集 = new ImageList();/*设置与初始化*/                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\icolicious.ico"));                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\观世音菩萨2.bmp"));                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\sucaiwcom-1240000qj.gif"));                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\sucaiwcom-1930000pf.gif"));                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\Illustrator 10.ico"));                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\狮子吼.ico"));                树.ImageList = 图标集; 树.Nodes.Clear();                DataTable 树表 = null; string[] 重组表列 = null;                Func<DataTable> 数据表 = () => 加载数据(); DataTable 表 = 数据表();/*调用vs2010版数据控件自动生成读取数据库到表方法(无参返回值)*/                if (表.TableName == "人员") 重组表列 = new string[] { "归属", "姓名", "生日" };                if (表.TableName == "提示") 重组表列 = new string[] { "提示内容", "心情日记" };                if (表.TableName == "文摘") 重组表列 = new string[] { "总类", "别类", "子类", "标题", "内容" };                List<TreeNode> 子节 = new List<TreeNode>(); 子节.Add(new TreeNode()); int 列数 = 重组表列.Length; List<TreeNode>[] 节存 = new List<TreeNode>[列数 - 1];                for (int 级 = 0; 级 != 列数 - 1; 级++) { 节存[级] = new List<TreeNode>(); 子节.Add(new TreeNode()); }                树表 = 表.DefaultView.ToTable(true, 重组表列);                /*玄龙戏珠无级树=>开始*/                foreach (DataRow 数据列 in 树表.Rows)                {                    bool 节控 = false;                    for (int 级 = 0; 级 != 列数; 级++)                    {                        string 节路径 = "";                        if (树.Nodes.Count == 0) 节控 = true;                        for (int 数 = 0; 数 <= 级; 数++) { if (节路径 == "") 节路径 = 数据列[数].ToString(); else 节路径 += "\\" + 数据列[数].ToString(); }                        if (级 < 列数 - 1) foreach (TreeNode 节数据 in 节存[级]) { if (节路径 == 节数据.FullPath) { 子节[级] = 节数据; 节控 = false; break; } else 节控 = true; } else 节控 = true;                        if (节控 && 级 == 0)                        {                            TreeNode 节点 = new TreeNode();                            节点.Tag = 数据列; 节点.Text = 数据列[0].ToString();                            节点.ImageIndex = 3; 节点.SelectedImageIndex = 2;/*图标按条件自编*/                            节存[级].Add(节点); 子节[级] = 节点;                            树.Nodes.Add(节点);                        }                        if (级 > 0 && 节控)                        {                            TreeNode 加子节 = new TreeNode();                            加子节.Tag = 数据列; 加子节.Text = 数据列[级].ToString();                            加子节.ImageIndex = 4; 加子节.SelectedImageIndex = 5;/*图标按条件自编*/                            if (级 < 列数 - 1) 节存[级].Add(加子节); 子节[级] = 加子节; 子节[级 - 1].Nodes.Add(加子节);                        }                        if (级 < 列数 - 1) 节存[级] = 节存[级].Distinct().ToList();                    }                }            }));        }/*核心篇*/        private void 玄龙戏珠无级树()/*构思设计核心实现,所以发布纯粹给有兴趣研究代码多种写法的人作参考.*/        {            this.Invoke(new Action(() =>            {                ImageList 图标集 = new ImageList();/*设置与初始化*/                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\icolicious.ico"));                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\观世音菩萨2.bmp"));                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\sucaiwcom-1240000qj.gif"));                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\sucaiwcom-1930000pf.gif"));                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\Illustrator 10.ico"));                图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\狮子吼.ico"));                树.ImageList = 图标集; 树.Nodes.Clear();                DataTable 树表 = null; string[] 重组表列 = null;                Func<DataTable> 数据表 = () => 加载数据(); DataTable 表 = 数据表();                if (表.TableName == "人员") 重组表列 = new string[] { "归属", "姓名", "生日" };                if (表.TableName == "提示") 重组表列 = new string[] { "提示内容", "心情日记" };                if (表.TableName == "文摘") 重组表列 = new string[] { "总类", "别类", "子类", "标题", "内容" };                List<TreeNode> 子节 = new List<TreeNode>(), 节存 = new List<TreeNode>(); int 列数 = 重组表列.Length;                树表 = 表.DefaultView.ToTable(true, 重组表列);                /*玄龙戏珠无级树=>开始*/                foreach (DataRow 数据列 in 树表.Rows)                {                    bool 节控 = false;                    for (int 级 = 0; 级 != 列数; 级++)                    {                        string 节路径 = "";                        if (树.Nodes.Count == 0) 节控 = true;                        for (int 数 = 0; 数 <= 级; 数++) { if (节路径 == "") 节路径 = 数据列[数].ToString(); else 节路径 += "\\" + 数据列[数].ToString(); }                        if (级 < 列数 - 1) foreach (TreeNode 节数据 in 节存) { if (节路径 == 节数据.FullPath) { 子节[级] = 节数据; 节控 = false; break; } else 节控 = true; } else 节控 = true;                        if (节控 && 级 == 0)                        {                            TreeNode 节点 = new TreeNode(); 子节.Add(节点);                            节点.Tag = 数据列; 节点.Text = 数据列[0].ToString();                            节点.ImageIndex = 3; 节点.SelectedImageIndex = 2;                            节存.Add(节点); 子节[级] = 节点;                            树.Nodes.Add(节点);                        }                        if (级 > 0 && 节控)                        {                            TreeNode 加子节 = new TreeNode(); 子节.Add(加子节);                            加子节.Tag = 数据列; 加子节.Text = 数据列[级].ToString();                            加子节.ImageIndex = 4; 加子节.SelectedImageIndex = 5;                            if (级 < 列数 - 1) 节存.AddRange(子节); 子节[级] = 加子节;                            子节[级 - 1].Nodes.Add(加子节);                        }                        if (级 < 列数 - 1) { 节存 = 节存.Distinct().ToList(); 节存 = 节存.Where(筛选 => 筛选.Level < 列数 - 1).ToList(); }                    }                }            }));        }


        private DataTable 测试九九表树()        {            /*创建测试九九表、设置表名、列名*/            DataTable 测试九九表 = new DataTable(); 测试九九表.TableName = "测试树表"; 测试九九表.Columns.Add("九九表");            for (int 表头序 = 1; 表头序 <= 9; 表头序++) { 测试九九表.Columns.Add(表头序.ToString()); }            /*添加行数据*/            for (int i = 1; i <= 9; i++)            {                DataRow 测试树表列 = 测试九九表.NewRow(); 测试树表列[0] = "九九表";                for (int j = 1; j <= 9; j++)                { 测试树表列[j] = i.ToString() + "×" + j.ToString() + "=" + (i * j).ToString(); }                测试九九表.Rows.Add(测试树表列);            }            return 测试九九表;        }


原创粉丝点击