一定规则的字符串生成树结构
来源:互联网 发布:上帝之城奥古斯丁知乎 编辑:程序博客网 时间:2024/06/05 15:36
最近做项目要在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)
生成的树结构相信大家一看就知道了。
代码:(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)
生成的树结构相信大家一看就知道了。
- 一定规则的字符串生成树结构
- java生成具有一定规则的唯一字符串
- 如何快速生成具有一定规律的多行字符串
- UVA10001按照一定的规则三位一体转化字符串,给定字符串看能否转化出
- (Relax ST1.29)POJ 3749 破译密码(将一个字符串按照一定的规则转化成另外一个字符串)
- 生成一定范围的随机数
- 生成 一定范围内的随机数
- 生成一定范围的随机数
- 生成一定数目的排列
- 生成一定范围内的随机数
- swift按照一定规则生成校验签名sign,扩展Dictionary
- 随机生成一个01字符串,并要符合一定的要求
- java 获取一定长度的随机字符串 可用于生成交易订单号交易号等
- PAT 1061. Dating (20)(按一定规则找俩个字符串中相同的字符)(待修改)
- JS读取XML字符串生成树结构
- Random类生成一定范围内的整数
- 按照一定的格式生成Bean
- 生成一定范围内的真随机数
- ASP.NET上传图片的简单方法
- Linux内核配置系统浅析
- 随笔
- Dcc32Speed Update(Dcc32speed 1.2)
- ASP.NET , I'm coming!!!
- 一定规则的字符串生成树结构
- C语言函数调用约定
- GridView提交/插入数据/删除信息后字体变大问题的解决方法
- core java1
- 简单delphi自校验
- 《JAVA编程思想》学习备忘(第277页Polymorphism-2)
- 联想F41Aubuntu发声
- Symbian中各种提示、输入对话框的使用
- Oracle 系统表大全[转]