一定规则的字符串生成树结构

本文介绍如何在C#的WinForm应用中创建一个多表头的报表,由于默认的datagridview控件无法满足需求,作者通过解析一定规则的字符串来生成树结构,以此实现自定义的复杂表头。代码中提供了一个名为`CreaterTree`的主函数,它接受一个字符串参数,然后递归地创建树节点。示例字符串如`"结一[结一一,结一二],结点二[结点一二,结点二二],结点3,结点4"`,调用该函数即可生成相应的树结构。" 113503789,10324898,使用Python的TuShare接口获取和处理财经数据,"['Python', '数据接口', '金融数据', '股票市场', '数据分析']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     最近做项目要在winform下做个多表头的报表,而C#下的datagridview不象可以简单的通过重构表头来实现。所以只好自己重写datagridview控件的表头,而从网上查了一点资料,可以通过重写表头来实现。有一个是用树来表示表头的,由于我的表头的列很多,如果手工一行一行的添加结点,重复代码量很多,于是自己根据一定规则的字条串来生成一个树,
代码:(C#)
主函数
     public TreeView CreaterTree(string strHeader)
        {
            TreeView treeTemp = new TreeView();
            treeTemp.Nodes.Add("root");
            CreateTreeSubNode(treeTemp, strHeader, 0);
            return treeTemp;
        }
//递归生成子结点
        protected void CreateTreeSubNode(TreeView treeParent, string strHeader, int intLevel)
        {
            if (strHeader == "")
            {
                return;
            }
            TreeNode treeNow = treeParent.Nodes[0];
//找观察家当前结点的父结点
            for (int i = 0; i < intLevel; i++)
            {
                treeNow = treeNow.Nodes[treeNow.Nodes.Count - 1];
            }
            int intRoot = 0;
            int intParent = 0;
            int intMin = 0;
            string strNowNodeName = "";
            string strLastName = "";
            intRoot = strHeader.IndexOf('[');
            intParent = strHeader.IndexOf(']');

            if (intRoot == -1)
            {
                intRoot = int.MaxValue;
            }
            if (intParent == -1)
            {
                intParent = int.MaxValue;
            }

            intMin = Math.Min(intRoot, intParent);
            if (intMin == int.MaxValue)
            {
                //最后一个结点
                strNowNodeName = strHeader.TrimEnd(']');
                strNowNodeName = strNowNodeName.TrimStart(',');
                strLastName = "";
            }
            else
            {
                strNowNodeName = strHeader.Substring(0, intMin);
                strLastName = strHeader.Substring(intMin + 1);
                if (intRoot == intMin)
                {
                    //当前结点为根结点
                    intLevel++;
                }
                else if (intParent == intMin)
                {
                    intLevel--;
                }
            }
            string[] strTree = strNowNodeName.TrimStart(',').TrimEnd(',').Split(',');
            foreach (string strnode in strTree)
            {
                if (strnode != "")
                {
                    treeNow.Nodes.Add(strnode);
                }
            }
            CreateTreeSubNode(treeParent, strLastName, intLevel);
        }
树型结构字符串为:strHeader="结一[结一一,结一二],结点二[结点一二,结点二二],结点3,结点4"
调用方法:CreaterTree(strHeader)
生成的树结构相信大家一看就知道了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值