首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

treeview有关问题

2012-01-23 
treeview问题privatevoidbutton1_Click(objectsender,EventArgse){SqlConnectioncnnnewSqlConnection( s

treeview问题
private   void   button1_Click(object   sender,   EventArgs   e)
                {
                        SqlConnection   cnn   =   new   SqlConnection( "server=(local);database=DSTransSVR;uid=sa;pwd=; ");  
                        cnn.Open();

                        TreeNode   node   =   new   TreeNode();
                        treeView1.Nodes.Add(ShowAllTree(0,   cnn,   node));       //根节是以PID为0标志的      

                        cnn.Close();
                }

                private   TreeNode   ShowAllTree(int   id,   SqlConnection   cnn,   TreeNode   node)
                {
                        SqlDataAdapter   da   =   new   SqlDataAdapter( "SELECT       id,pid         FROM       sxlxxyssq   ",   cnn);
                        DataTable   dt   =   new   DataTable();
                        da.Fill(dt);


                    for   (int   i   =   1;   i   <   dt.Rows.Count;   i++)
                        {
                                TreeNode   newNode   =   new   TreeNode(dt.Rows[i][0].ToString());
                                node.Nodes.Add(newNode);

                                int   newID   =   (int)dt.Rows[i][0];

                                ShowAllTree(newID,   cnn,   newNode);       //递归调用,将子结点ID当做下一当前结点ID      

                        }
                        dt.Dispose();
                        da.Dispose();

                        return   node;      

                }
以上语句为什么运行时,结点不显示值???

[解决办法]
private TreeNode parentNode; //加节点时候的父节点
private string parentCode; //父节点的编码

//加载整个树
private void LoadNode()
{
SalesService.WebService service = ServiceCon.CreateService();


DataSet ds = service.InventoryClassGetAll();

//一级
string code1 = "len(trim(cInvCCode))=2 ";
string[] nodeValue;
foreach (DataRow row in ds.Tables[0].Select(code1))
{
TreeNode nod = new TreeNode();
nodeValue = new string[3]; //将值存入Tag,避免再次从数据库提取
nodeValue[0] = row[ "cInvCCode "].ToString().Trim();
nodeValue[1] = row[ "cInvCName "].ToString().Trim();
nodeValue[2] = row[ "memo "].ToString().Trim();
nod.Text = "( " + row[ "cInvCCode "].ToString().Trim() + ") " + row[ "cInvCName "].ToString().Trim();
nod.Tag = nodeValue;
this.treeView1.Nodes.Add(nod);

}
//二级及以下节点
string code2 = "len(trim(cInvCCode))> 2 ";
string[] nodeValue2;
foreach (DataRow row in ds.Tables[0].Select(code2))
{
TreeNode nod = new TreeNode();
nodeValue2 = new string[3];
nodeValue2[0] = row[ "cInvCCode "].ToString().Trim();
nodeValue2[1] = row[ "cInvCName "].ToString().Trim();
nodeValue2[2] = row[ "memo "].ToString().Trim();
nod.Text = "( " + row[ "cInvCCode "].ToString().Trim() + ") " + row[ "cInvCName "].ToString().Trim();
nod.Tag = nodeValue2;
this.parentCode = row[ "cInvCCode "].ToString().Trim().Substring(0, nodeValue2[0].Length - 2);
// MessageBox.Show(this.parentCode);
this.CallRecursive(this.treeView1); //寻找父节点
parentNode.Nodes.Add(nod);
}
}

// 循环TreeView
private void CallRecursive(TreeView treeView)
{
TreeNodeCollection nodes = treeView.Nodes;
string[] nodeTag = new string[3];
foreach (TreeNode n in nodes) //一级节点
{
// MessageBox.Show(n.Text);
nodeTag = (string[])n.Tag;
if (this.parentCode == nodeTag[0])
{
this.parentNode = n; //找到父节点
}
else
{
PrintRecursive(n);
}
}
}
//递归循环有子节点的每个节点
private void PrintRecursive(TreeNode treeNode)
{
string[] nodeTag = new string[3];
foreach (TreeNode tn in treeNode.Nodes)
{
nodeTag = (string[])tn.Tag;
if (this.parentCode == nodeTag[0])
{
this.parentNode = tn; //找到父节点
}
else
{
PrintRecursive(tn);
}
}
}

这是我的代码,是可以的,希望对你有帮助
[解决办法]
//显示节点
private void GetTreeNode()
{
tveBranch.Nodes.Clear();
dt = db.BON_Branch().Tables[0].Copy();
DataView view = new DataView(dt);
view.RowFilter = "fatherID= '0 ' ";
if (view.Count > 0)
{
foreach (DataRowView row in view)
{
string name = row[ "name "].ToString().Trim();


TreeNode node = new TreeNode(name);
node.Tag = row[ "ID "].ToString().Trim();
tveBranch.Nodes.Add(node);
this.GetChildTree(name, tveBranch.Nodes[0], row);
tveBranch.SelectedNode = tveBranch.Nodes[0];
}
}
}

//显示子节点
private void GetChildTree(string strName, TreeNode node, DataRowView myrow)
{
dt = db.BON_Branch().Tables[0].Copy();
DataView view = new DataView(dt);
view.RowFilter = "fatherID= ' " + myrow[ "ID "].ToString().Trim() + " ' ";
if (view.Count > 0)
{
foreach (DataRowView myview in view)
{
string name = "[ "+myview[ "ID "].ToString().Trim()+ "] "+ myview[ "name "].ToString().Trim();
TreeNode nd = new TreeNode(name);
nd.Tag = myview[ "ID "].ToString().Trim();
//nd.Tag = myview[ "autoID "].ToString().Trim() + "| " + myview[ "ID "].ToString().Trim();
node.Nodes.Add(nd);
this.GetChildTree(name, nd, myview);
}
}
}


这是我刚做的一个项目,显示部门的
[解决办法]
用得着这么麻烦吗?
我也刚完成部门树的无限级展示,代码如下:

// 初始化部门树.
private void InitTree()
{
treeDepartment.Nodes.Clear();
WebKQ.Model.Department rootDepartment = (WebKQ.Model.Department)bll.GetDepartmentByBelong( "# ")[0]; //tree的根对象.唯一的.
TreeNode rootTree = new TreeNode(rootDepartment.DeptName, rootDepartment.DeptCode, null, "javascript:jsFillDepartment( ' " + rootDepartment.DeptCode + " ', ' " + rootDepartment.DeptName + " ', ' " + rootDepartment.Belong + " '); ", null); //tree的根结点.
treeDepartment.Nodes.Add(rootTree);

BuildTreeNode(rootTree, rootDepartment.DeptCode);
treeDepartment.ExpandAll();
}


// 递归实现无限级tree.
private void BuildTreeNode(TreeNode treeNode, string Belong)
{
string index = null;
WebKQ.Model.DepartmentCollection allDepartment = bll.GetAllDepartment();
WebKQ.Model.DepartmentCollection childCollection = bll.GetDepartmentByBelong(Belong);
foreach (WebKQ.Model.Department d in childCollection)
{
//根据下拉列表的value属性得到它的index属性,以便自动选择.
for (int i = 0; i < allDepartment.Count; i++)
{
if (d.Belong == ((WebKQ.Model.Department)allDepartment[i]).DeptCode)
{
index = i.ToString();
}
}
string url = "javascript:jsFillDepartment( ' " + d.DeptCode + " ', ' " + d.DeptName + " ', ' " + index + " '); ";
TreeNode childTree = new TreeNode(d.DeptName, d.DeptCode, null, url, null);
treeNode.ChildNodes.Add(childTree);

BuildTreeNode(childTree, d.DeptCode); //递归实现无限级tree.
}
}

热点排行