数据库表结构
id name grade isEnd
01 a 1 0
0101 b 2 0
010102 c 3 1
02 d 1 0
0201 e 2 1
03 f 1 0
0301 g 2 1 grade 代表级别 1,2,3
isEnd 是否为末级 0不是,1是//树的绑定
private void BuilderTree(int ParentID, TreeNode pNode)
{
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
string sql = "select * from inventoryclass";
DataSet ds = DBHelper.GetData(sql); DataView dvTree = new DataView(ds.Tables[0]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[isEnd] = " + ParentID;
foreach (DataRowView row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{
//添加根节点
Node.Text = row["name"].ToString();
TreeView1.Nodes.Add(Node);
Node.Expanded = true;
BuilderTree(int.Parse(row["id"].ToString()),Node);//递归
}
else
{
//添加当前节点的子节点
Node.Text = row["name"].ToString();
pNode.ChildNodes.Add(Node);
Node.Expanded = true;
BuilderTree(int.Parse(row["id"].ToString()), Node);//递归 }
} } //PageLoad 事件
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BuilderTree(0, (TreeNode)null);
}
}
出来的结果是子节点都加在第一个父节点上了
id name grade isEnd
01 a 1 0
0101 b 2 0
010102 c 3 1
02 d 1 0
0201 e 2 1
03 f 1 0
0301 g 2 1 grade 代表级别 1,2,3
isEnd 是否为末级 0不是,1是//树的绑定
private void BuilderTree(int ParentID, TreeNode pNode)
{
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
string sql = "select * from inventoryclass";
DataSet ds = DBHelper.GetData(sql); DataView dvTree = new DataView(ds.Tables[0]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[isEnd] = " + ParentID;
foreach (DataRowView row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{
//添加根节点
Node.Text = row["name"].ToString();
TreeView1.Nodes.Add(Node);
Node.Expanded = true;
BuilderTree(int.Parse(row["id"].ToString()),Node);//递归
}
else
{
//添加当前节点的子节点
Node.Text = row["name"].ToString();
pNode.ChildNodes.Add(Node);
Node.Expanded = true;
BuilderTree(int.Parse(row["id"].ToString()), Node);//递归 }
} } //PageLoad 事件
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BuilderTree(0, (TreeNode)null);
}
}
出来的结果是子节点都加在第一个父节点上了
解决方案 »
- UrlRewritingNet.UrlRewriter.dll实现二级域名怎么实现??
- 关于mxl服务端与客户端传值的问题?
- 如何给菜单每一个小项写事件?
- asp:textbox大小控制
- WebForm里怎么用类似于WinForm的Form1.ActiveForm.Refresh函数?
- 修改一条记录,怎么用触发器触发三条insert语句?火急!小妹在此谢过!
- 求助:关于ACCESS数据库连接的问题!!急~~~~
- 如何在.aspx的页面上直接启动一个应用程序?
- 我在母版页的内容页中,加入的JS代码,在编译的时候他总是报JS运行时间错误,不知道是什么原因。。
- Mindsware动态数据对象平台v0.2版发布
- 关闭窗口,弹出新窗口的问题.
- 将 varchar 值 'Qekkon' 转换为数据类型为 int 的列时发生语法错误。
1 水果 0
2 梨子 1
3 香蕉 1
4 汽车 0
5 轿车 4
6 速腾 5
7 保罗 5
8 卡车 4
9 kav 8
10 df 8
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddTree(0, (TreeNode)null);
}
} public void AddTree(int ParentID, TreeNode pNode)
{
//获取你的表
DataView dvTree = new DataView(ds.Tables[0]); dvTree.RowFilter = "[id] = " + ParentID; foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{
Node.Text = Row["name"].ToString();
Node.Value = Row["name"].ToString();
//可以设置跳转的页面
//Node.NavigateUrl = Row["NavigationUrl"].ToString();
//可以设置你鼠标移上去显示的提示
//Node.ToolTip = Row["description"].ToString();
TreeView1.Nodes.Add(Node);
//Node.Expanded = true;
AddTree(Int32.Parse(Row["id"].ToString()), Node);
}
else
{
Node.Text = Row["name"].ToString();
Node.Value = Row["name"].ToString();
//Node.NavigateUrl = Row["NavigationUrl"].ToString();
//Node.ToolTip = Row["description"].ToString(); pNode.ChildNodes.Add(Node);
//Node.Expanded = true;
AddTree(Int32.Parse(Row["id"].ToString()), Node);
}
}
} 思路就是先筛选父节点为0的,代表根节点,然后依次递归
绑定tree view 是有递归的方法 先绑定父级节点
接着使用tree view的TreeNodePopulate事件绑定父级节点下的子节点
但是select语句要写好
dvTree.RowFilter = "[isEnd] = " + ParentID;//首先你parentId是0,你第1次筛选
就把所有isEnd为0的筛选出来了
结果是
id name grade isEnd
01 a 1 0
0101 b 2 0 02 d 1 0 03 f 1 0
然后进行递归,因为第1个节点的id 是01
所以第2次调用
BuilderTree(int ParentID, TreeNode pNode) 这个方法的时候,paentid=1(你是用的INT,所以会被转化为1),noed为刚才的那个节点
然后筛选
就把所有isEnd为1的筛选出来了id name grade isEnd 010102 c 3 1 0201 e 2 1 0301 g 2 1 你说会不会把所有节点加在第1个父节点上LZ你思路都没搞清楚啊.............
01 a 1 0
0101 b 2 0
010102 c 3 1
02 d 1 0
0201 e 2 1
03 f 1 0
0301 g 2 1 改表的设计,把isEnd 和 grade合并为 parentId
id 编号按123....这样编如果是根节点,则 paerntId =0
如果不是,则标记为它是属于哪个节点的子节点你那个表改过来后应该是id name parentId
1 a 0
2 b 1
3 c 2
4 d 0
5 e 4
6 f 0
7 g 6 这样就能用你那个代码了
{
string sql = "select * from inventoryclass where grade=1";
DataSet ResultSet = DBHelper.GetData(sql);
foreach (DataRow row in ResultSet.Tables[0].Rows) //一级节点
{
TreeNode tn = new TreeNode(row["name"].ToString(), row["id"].ToString());
this.TreeView1.Nodes.Add(tn);
if (row["isEnd"].ToString() != "1")//二级
{
string sqll = "select * from inventoryclass where grade=2 and left(id,2)=" + tn.Value;
DataSet rs = DBHelper.GetData(sqll);
foreach (DataRow rows in rs.Tables[0].Rows)
{
TreeNode tns = new TreeNode(rows["name"].ToString(), rows["id"].ToString());
tn.ChildNodes.Add(tns);
if (rows["isEnd"].ToString() != "1")//若不为末级,三级
{
string sqlll = "select * from inventoryclass where grade=3 and left(id,4)=" + tns.Value;
DataSet ds = DBHelper.GetData(sqlll);
foreach (DataRow dr in ds.Tables[0].Rows)
{
TreeNode tnn = new TreeNode(dr["name"].ToString(), dr["id"].ToString());
tns.ChildNodes.Add(tnn);
if (dr["isEnd"].ToString() != "1")//若不为末级,四级
{
string sqllll = "select * from inventoryclass where grade=4 and left(id,6)=" + tnn.Value;
DataSet dsf = DBHelper.GetData(sqlll);
foreach (DataRow drf in dsf.Tables[0].Rows)
{
TreeNode tnf = new TreeNode(drf["name"].ToString(), drf["id"].ToString());
tnn.ChildNodes.Add(tnf);
}
}
}
} } }
}
}