读书人

treeview有关问题

发布时间: 2012-01-23 21:57:28 作者: rapoo

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.
}
}

读书人网 >C#

热点推荐