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 1grade 代表级别
isEnd 是否为末级
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);//递归 }
} }
出来的结果是字节点都加在第一个父节点上了
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 1grade 代表级别
isEnd 是否为末级
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);//递归 }
} }
出来的结果是字节点都加在第一个父节点上了
/// <summary>
/// BindTree给Treeview绑定数据
/// </summary>
/// <param name="tv">TreeView</param>
/// <param name="ds">DataSet</param>
private void BindTree(TreeView tv,DataSet ds)
{
//得到数据条数
int cnt = ds.Tables["User"].Rows.Count;
//模块名称
string ModuleName = "";
//上条记录的模块名称
string PreModuleName = "";
//子模块名称
string ChildName = "";
//上条记录的子模块的名称
string PreChildName = " "; //第一层节点
TreeNode FirstNode = new TreeNode();
//第二层节点
TreeNode SecondNode = new TreeNode();
//遍历所有记录,给各节点赋值
for (int index = 0; index < cnt; index++)
{
//模块节点的名称
ModuleName = ds.Tables["User"].Rows[index]["MODULE_NAME"].ToString();
//子模块节点的名称
ChildName = ds.Tables["User"].Rows[index]["CHILDMODULE_NAME"].ToString();
//叶节点,并实例化
TreeNode PageNode = new TreeNode();
PageNode .Text = ds.Tables["User"].Rows[index]["PAGE_NAME"].ToString();
PageNode.Value = ds.Tables["User"].Rows[index]["PAGE_ID"].ToString();
PageNode.NavigateUrl = ds.Tables["User"].Rows[index]["PAGE_LINK"].ToString();
PageNode.Target = STRTARGET; //判断是否已经有过该节点,如无,添加新节点
if (ModuleName != PreModuleName)
{
TreeNode ModuleNode = new TreeNode();
ModuleNode.Target = "";
ModuleNode.Text = ModuleName;
tv.Nodes.Add(ModuleNode);
FirstNode = ModuleNode;
FirstNode.SelectAction = TreeNodeSelectAction.None;
} //判断子模块节点是否为空,并添加节点
if ((ChildName != PreChildName) && (ChildName != ""))
{
TreeNode ChildNode = new TreeNode();
ChildNode.Target = "";
ChildNode.Text = ds.Tables["User"].Rows[index]["CHILDMODULE_NAME"].ToString();
FirstNode.ChildNodes.Add(ChildNode);
SecondNode = ChildNode;
SecondNode.SelectAction = TreeNodeSelectAction.None;
} //针对不同情况,给叶子节点赋值
if (ChildName.Equals(string.Empty))
{
FirstNode.ChildNodes.Add(PageNode);
}
else
{
SecondNode.ChildNodes.Add(PageNode);
} PreModuleName = ModuleName;
PreChildName = ChildName;
}
} 三层节点与两层节点并存绑定值
比如说有个Parent字段?
isEnd 是否为末级