我遇到了一个问题,需要将一张表里的数据,弄成treeview形式,
sql 文件是这个
https://www.wenwenlove.cn/my/script.sql ,我放到我服务器上了
这个表里目前有4级结构,分别是1,2,3,4,后面可能有5,或则。。。
能帮我解决的万分感谢
TreeNode tn1 = treeView1.Nodes.Add("", "存货分类");
DataTable dt =DBHelpr.Query("select clnvCCode,clnvCName,ilnvCGrade,blnvCend from InventoryClass");
// cometree(tn1.Nodes, dt, "",1);
DataTable dts = GetNewDataTable(dt, "ilnvCGrade=" + 1, "clnvCName asc");
for (int i = 0; i < dts.Rows.Count; i++)
{
tn1.Nodes.Add(dts.Rows[i]["clnvCName"].ToString(), dts.Rows[i]["clnvCName"].ToString());
if (dts.Rows[i]["blnvCend"].ToString()=="0")
cometree(tn1.Nodes[i].Nodes, dt, dts.Rows[i]["clnvCCode"].ToString(), 2);
}
public void cometree(TreeNodeCollection tn, DataTable dt, string zkey, int ilnvCGrade)
{
DataTable dts = GetNewDataTable(dt, "clnvCCode like'" + zkey + "%' and ilnvCGrade=" + ilnvCGrade, "clnvCName asc");
for (int i = 0; i < dts.Rows.Count; i++)
{
tn.Add(dts.Rows[i]["clnvCName"].ToString(), dts.Rows[i]["clnvCName"].ToString());
if (dts.Rows[i]["blnvCend"].ToString() == "0")
cometree(tn[i].Nodes, dt, dts.Rows[i]["clnvCCode"].ToString(), ilnvCGrade+1);
}
}
/// 执行DataTable中的查询返回新的DataTable
/// </summary>
/// <param name="dt">源数据DataTable</param>
/// <param name="condition">查询条件</param>
/// <returns></returns>
private DataTable GetNewDataTable(DataTable dt, string condition, string sortstr)
{
DataTable newdt = new DataTable();
newdt = dt.Clone();
DataRow[] dr = dt.Select(condition, sortstr);
for (int i = 0; i < dr.Length && i < 200; i++)
{
newdt.ImportRow((DataRow)dr[i]);
}
return newdt;//返回的查询结果
}
这不就是编号吗?除去根节点 ,两位数字的一定在一层,四位的一定在第二层,只不过前两位是上层的编号,最后两位是本层编号,
比如01 02 03 是第一层的编号,0101 0102 是 第一层的01 下面01号 和01层下面的02号,第三层的一定是六位 010101 =》 01-01-01 是 01下面的01 下面的01 号,
依次类推啊,第四层是八位数 ,第五层是十位啊,。blnvEnd 代表是否是叶节点,0 没有后代节点 =》叶节点 ,1 代表还有=》非叶节点。
你不是已经有规律了吗 一级节点cInvCCode长度是2 往后每级节点cInvCCode长度加2 直接根据cInvCCode就可以把层级关系关联出来啊
select * from InventoryClass where cInvCCode like '__' 查一级节点
select * from InventoryClass where cInvCCode like '01__' 查01下的二级节点
tn1=treeComboBox1.Nodes.Add("", "存货分类");
DataTable dt = "select clnvCName,ilnvCGrade from 存货分类";
cometree(tn1.Nodes, dt, "");
public void cometree(TreeNodeCollection tn, DataTable dt, string zkey)
{
DataTable dts = GetNewDataTable(dt, "ilnvCGrade='" + zkey + "'", "clnvCName asc");
for (int i = 0; i < dts.Rows.Count; i++)
{
tn.Add(dts.Rows[i]["clnvCName"].ToString(), dts.Rows[i]["clnvCName"].ToString());
cometree(tn[i].Nodes, dt, (Convert.toInt32(dts.Rows[i]["ilnvCGrade"].ToString())-1).Tostring());
}
}
/// 执行DataTable中的查询返回新的DataTable
/// </summary>
/// <param name="dt">源数据DataTable</param>
/// <param name="condition">查询条件</param>
/// <returns></returns>
private DataTable GetNewDataTable(DataTable dt, string condition, string sortstr)
{
DataTable newdt = new DataTable();
newdt = dt.Clone();
DataRow[] dr = dt.Select(condition, sortstr);
for (int i = 0; i < dr.Length && i < 200; i++)
{
newdt.ImportRow((DataRow)dr[i]);
}
return newdt;//返回的查询结果
}
//**
//*
//* length, 起始值 0
//* pNode, 节点
//* code //长度从0开始
//*
public void add(int length,TreeNode pNode,String code){
db = DBHelper.Query("select * from inverntoryclass where cInvCCode like '" + code + "'+'%' and len(cInvCCode)='" + length + "'+2", "inverntoryclass");
for (int i = 0; i < db.Rows.Count; i++)
{
TreeNode Node = new TreeNode();
//如果 binCend=1表示是没有子节点
if (db.Rows[i]["binCend"].ToString() == "1")
{
//treeview添加
//父节点添加子节点,不用递归了
treeView1.Nodes.Add(Node);
}
else
{
//有子节点
//treeview添加子节点 ,递归操作
pNode.Nodes.Add(Node);
add(length + 2, Node, code);
}
}
}
private void Form4_Load(object sender, EventArgs e)
{
TreeNode pNode = null;
add(0, pNode, "0");
}
private void button1_Click(object sender, EventArgs e)
{
TreeNode tvroot = new TreeNode("存货分类");
treeView1.Nodes.Add(tvroot);
//生成第一级
DataTable dt = GetData("SELECT * FROM dbo.InventoryClass WHERE iInvCGrade=1");
for (int i = 0; i < dt.Rows.Count; i++)
{
TreeNode t1 = new TreeNode(dt.Rows[i]["cInvCName"].ToString());
tvroot.Nodes.Add(t1);
if (dt.Rows[i]["bInvCEnd"].ToString() == "False")
{
BuildTree(t1, dt.Rows[i]["cInvCCode"].ToString(), 2);
}
}
}
public void BuildTree(TreeNode tvRoot, string strType, int iLevel)
{
DataTable dt = GetData("SELECT * FROM dbo.InventoryClass WHERE cInvCCode LIKE '" + strType + "%' and iInvCGrade=" + iLevel.ToString());
for (int i = 0; i < dt.Rows.Count; i++)
{
TreeNode t1 = new TreeNode(dt.Rows[i]["cInvCName"].ToString());
tvRoot.Nodes.Add(t1);
if (dt.Rows[i]["bInvCEnd"].ToString() == "False")
{
BuildTree(t1, dt.Rows[i]["cInvCCode"].ToString(), iLevel + 1);
}
}
}
public DataTable GetData(string strSql)
{
string strConn = "data source=192.168.1.100;initial catalog=tempdb;user id=sa;password=123abcABC!@#;";
Common.DbContextBase.EzagooDataBaseSingle db = new Common.DbContextBase.EzagooDataBaseSingle(strConn);
try
{
db.OpenDB();
return db.Query(strSql);
}
catch (System.Exception ex)
{
return null;
}
finally
{
db.CloseDB();
db = null;
}
}


