求解关于TreeView如何操作三张表的问题

LinuxR 2007-08-09 09:14:32
每个类别对应多个系列 每个系列对应多个产品
类别表 LBID(自增ID) LBMC(类别名称)
系列表 XLID(自增ID) LBID(与类别表关联) XLMC(系列名称)
产品表 CPID(自增ID) LBID XLID CPMC(产品名称) CPJG(价格)等等
请问如何利用TreeView控件实现
-类别1
-系列1
-产品1
-产品2
+系列2
.
.
.
+类别2
+类别3
.
.
.
如此的树状图呢?看了论坛上不少TreeView的问题,解决这样问题的很少,希望高手能帮忙
...全文
226 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
LinuxR 2007-08-10
  • 打赏
  • 举报
回复
经过抄袭 柔石的代码 实现了要得效果 tn.ChildNodes Nodes Web没有定义的
vzxq 2007-08-10
  • 打赏
  • 举报
回复
用一张表用递归就可以了
zwwlovezy1 2007-08-10
  • 打赏
  • 举报
回复
我问你 在SQL里做个视图会吗?
zwwlovezy1 2007-08-10
  • 打赏
  • 举报
回复
tn是TreeNode tn=new TreeNode
示例化出来的
LinuxR 2007-08-10
  • 打赏
  • 举报
回复
tn.Nodes 没有这个定义啊
LinuxR 2007-08-10
  • 打赏
  • 举报
回复
TreeView递归绑定你会不会啊?
会的话直接把这三张表建立一个视图,在绑定一下不就完了嘛。
不会 能给个例子吗
shilei831115 2007-08-09
  • 打赏
  • 举报
回复
显示文本已经加上了

需要加 超链接 提示语 超链接目标框架 等

其实 不用动,放到web里面也可以用的 只不过
public Form1()
{
InitializeComponent();
strConnection = string.Format(strConnectionString, Application.StartupPath + "\\");
InitTree();
}

改为:public Page_Load() …… 呵呵
LinuxR 2007-08-09
  • 打赏
  • 举报
回复
超复杂 怎么写出来的 佩服啊 我只会抄 前提有时候还是看不懂的情况下winform和web的一样吧
要加什么属性 呵呵 从来没用过TreeView
shilei831115 2007-08-09
  • 打赏
  • 举报
回复
public string strConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}aa.mdb;Jet OLEDB:Database Password=123";
public string strConnection = "";
public Form1()
{
InitializeComponent();
strConnection = string.Format(strConnectionString, Application.StartupPath + "\\");
InitTree();
}
public void InitTree()
{
string strSQL = "SELECT cp.cpid,cp.cpmc,lb.lbmc,xl.xlmc,lb.lbid,xl.xlid FROM CP,lb,xl where cp.lbid=lb.lbid and xl.xlid=cp.xlid ";

OleDbConnection objConnection = new OleDbConnection(strConnection);
objConnection.Open();
OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSQL, objConnection);
DataSet ds = new DataSet();
objAdapter.Fill(ds);
objAdapter.Dispose();
objConnection.Close();
objConnection.Dispose();

DataTable dt = new DataTable();
dt = ds.Tables[0].Copy();

InitTreeNode(treeView1.Nodes, "", ref dt, 0);

}

public void InitTreeNode(TreeNodeCollection tnc, string strPID, ref DataTable dt,int iPath)
{

string strRunTempID = "";
string strTempId = "";
if (iPath == 0)
{
//进行第一层遍历
foreach (DataRow dr in dt.Rows)
{
strRunTempID = dr["lbid"].ToString().Trim();
if (strTempId == strRunTempID && strTempId != "")
{
continue;
}
else
{
string strXLID = dr["lbid"].ToString().Trim();

strTempId = strRunTempID;
TreeNode tn = new TreeNode();
tn.Text = dr["lbmc"].ToString().Trim();
tnc.Add(tn);
InitTreeNode(tn.Nodes, strXLID, ref dt, 1);
}

}
}

if (iPath == 1)
{
strRunTempID = "";
strTempId = "";
//进行第2层遍历
DataView dv = new DataView();
dv.Table = dt;
dv.RowFilter = "lbid ='" + strPID + "'";
dv.Sort = "cpid";

foreach (DataRowView dr in dv)
{
strRunTempID = dr["xlid"].ToString().Trim();
if (strTempId == strRunTempID && strTempId != "")
{
continue;
}

string strXLID = dr["xlid"].ToString().Trim();
strTempId = strRunTempID;
TreeNode tn = new TreeNode();
tn.Text = dr["xlmc"].ToString().Trim();

tnc.Add(tn);
InitTreeNode(tn.Nodes, strXLID, ref dt, 2);

}
}

if (iPath == 2)
{
strRunTempID = "";
strTempId = "";
DataView dv = new DataView();
dv.Table = dt;
dv.RowFilter = "xlid ='" + strPID + "'";
dv.Sort = "cpid";
//进行第3层遍历
foreach (DataRowView dr in dv)
{

strTempId = strRunTempID;
TreeNode tn = new TreeNode();
tn.Text = dr["cpmc"].ToString().Trim();
tnc.Add(tn);

}
}

}

方法有点垃圾,不过确实能实现你所要的要求 呵呵 测试通过

附加查询出来的表结构为:
cpid cpmc lbmc xlmc lbid xlid
1 呵呵品 第一类 一类别1系列 1 1
2 呵呵品2 第一类 一类别2系列 1 2
3 呵呵品3 第一类 一类别2系列 1 2
4 呵呵品4 第一类 一类别3系列 1 3
5 呵呵品12 第一类 一类别4系列 1 4
6 呵呵品44 第一类 一类别4系列 1 4
7 呵呵品345 第一类 一类别4系列 1 4
8 呵呵品地 第二类 一类别5系列 2 5
9 地地道道 第二类 一类别5系列 2 5
10 送达发送 第二类 二类别1系列 2 6
11 的萨发 第二类 二类别2系列 2 7

试试吧 我在winform里面做的测试 到web 里面一样,只不过把属性加一下就可以了
LinuxR 2007-08-09
  • 打赏
  • 举报
回复
这样的操作感觉也会经常用到的 没有人做过吗?
LinuxR 2007-08-09
  • 打赏
  • 举报
回复
能否给个如此操作的例子啊
godgreat 2007-08-09
  • 打赏
  • 举报
回复
递归一下
LinuxR 2007-08-09
  • 打赏
  • 举报
回复
产品表 CPID(自增ID) LBID XLID CPMC(产品名称) CPJG(价格)等等
这个LBID是多余的?
zhaohui0312 2007-08-09
  • 打赏
  • 举报
回复
http://www.aspnet168.com.cn/
shilei831115 2007-08-09
  • 打赏
  • 举报
回复
系列表 XLID(自增ID) LBID(与类别表关联) XLMC(系列名称)
我想问 这个LBID是不是多余了

==============================

你说呢?我感觉也是,我都没有用到这个关系 [XLID(自增ID) LBID(与类别表关联)],只用XLID XLMC就可以了
zhaohui0312 2007-08-09
  • 打赏
  • 举报
回复
你可以把数据库中的三个表数据整合进一个虚拟表,然后递归实现 树控件
zwwlovezy1 2007-08-09
  • 打赏
  • 举报
回复
TreeView递归绑定你会不会啊?
会的话直接把这三张表建立一个视图,在绑定一下不就完了嘛。
LinuxR 2007-08-09
  • 打赏
  • 举报
回复
系列表 XLID(自增ID) LBID(与类别表关联) XLMC(系列名称)
我想问 这个LBID是不是多余了

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧