treeview递归获取部门有误,在线等。

laoban108 2009-07-29 08:50:52

private void yuangongjiansuo_Load(object sender, EventArgs e)
{
CreateTable();
CreateTree();
}
private DataTable dtTree = null;
private DataView dv = null;
private void CreateTable()
{
OracleConnection conn = new OracleConnection("Data Source=orcl;User ID=TODAI;Password=TODAI");
conn.Open();
string sss = "Select DEPTID,DEPTNAME,PARENT_DEPT_ID from HR_DEPARTMENT";
OracleDataAdapter kkk = new OracleDataAdapter(sss, conn);
DataSet ds = new DataSet();
kkk.Fill(ds);
dtTree = ds.Tables[0];
}

private void CreateTree()
{
dv = dtTree.DefaultView;
dv.Sort = "PARENT_DEPT_ID ASC";
DataRowView[] arrDRV = dv.FindRows(0);
if (arrDRV.Length == 0) return;
TreeNode tnNew = null;
foreach (DataRowView drv in arrDRV)
{
tnNew = treeView1.Nodes.Add(drv.Row["DEPTNAME"].ToString());
tnNew.Tag = drv.Row["DEPTID"].ToString();
CreateTreeNode(tnNew);
}
this.treeView1.ExpandAll();
}
private void CreateTreeNode(TreeNode tnParent)
{
DataRowView[] arrDRV = dv.FindRows(tnParent.Tag);
if (arrDRV.Length == 0) return;
TreeNode tnNew = null;
foreach (DataRowView drv in arrDRV)
{
tnNew = tnParent.Nodes.Add(drv.Row["DEPTNAME"].ToString());
tnNew.Tag = drv.Row["DEPTID"].ToString();
CreateTreeNode(tnNew);
}
}


找个资料中毒,东西全没了,大家帮帮忙~
...全文
253 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
laoban108 2009-07-30
  • 打赏
  • 举报
回复
谢谢大家,我解决了,我数据库的总节点的父级是个STRING,所以不能读出来,现在没问题了。
老Key 2009-07-30
  • 打赏
  • 举报
回复
这个是我常用的,简单明了,lz看看吧
TreeNode tr = new TreeNode();
tr.Text = "政府栏目管理";
tr.Value = "0";
TreeView1.Nodes.Add(tr);
fillnode(tr, 0);



/// 填充字节点
public void fillnode(TreeNode tree, int i)
{
try
{
DataTable dt = new DataTable();
shu.Sqlstring = "select * from info_lanmu where l_fid=" + i;
dt = shu.GetDataSet().Tables[0];
foreach (DataRow dr in dt.Rows)
{
TreeNode tc = new TreeNode();
tc.Text = dr["l_name"].ToString();
tc.Value = dr["l_id"].ToString();
tc.NavigateUrl = "mess.aspx?lanmuid=" + dr["l_id"].ToString();
tc.Target = "mainFrame";
tree.ChildNodes.Add(tc);
fillnode(tc, Convert.ToInt16(dr["l_id"].ToString()));

}
qqiuzaihui 2009-07-29
  • 打赏
  • 举报
回复
private DataTable myTable;
private void InitDatatable()
{
myTable = new DataTable();
myTable.Columns.Add("DEPTID");
myTable.Columns.Add("DEPTNAME");
myTable.Columns.Add("PARENT_DEPT_ID");
myTable.Rows.Add("1", "总公司", "0");
myTable.Rows.Add("2", "子公司1", "1");
myTable.Rows.Add("3", "子公司2", "1");
myTable.Rows.Add("4", "子财务部", "2");
myTable.Rows.Add("5", "技术部", "2");
myTable.Rows.Add("6", "销售部", "3");
}

private void button1_Click(object sender, EventArgs e)
{
InitDatatable();

this.treeView1.Nodes.Clear();    //treeView1为你的TreeView控件
TreeNode trvboot = new TreeNode("总公司");
this.treeView1.Nodes.Add(trvboot);

BuildTree("PARENT_DEPT_ID=1", this.myTable.Select("DEPTID=1")[0], trvboot);
this.treeView1.Nodes[0].ExpandAll();
}

private void BuildTree(string expression, DataRow drRow, TreeNode lstNode)
{
int superCount = this.myTable.Select(expression).Length;
if (superCount > 0)
{
foreach (DataRow dr in this.myTable.Select(expression))
{
string childExpress = string.Format("PARENT_DEPT_ID={0}", dr["DEPTID"].ToString());
if (this.myTable.Select(childExpress).Length > 0)
{
TreeNode sublst = new TreeNode(dr["DEPTNAME"].ToString());
lstNode.Nodes.Add(sublst);
BuildTree(childExpress, dr, sublst);
}
else
{
BuildTree(childExpress, dr, lstNode);
}
}
}
else
{
TreeNode node = new TreeNode(drRow["DEPTNAME"].ToString());
lstNode.Nodes.Add(node);
}
}
把myTable中的数据换成你的DataTable数据就行, 在VS2005中调试通过。
laoban108 2009-07-29
  • 打赏
  • 举报
回复
明天早晨再来
laoban108 2009-07-29
  • 打赏
  • 举报
回复
UP下,就是点小问题,大神们啊。。。。99我吧
laoban108 2009-07-29
  • 打赏
  • 举报
回复
这些方法我试过,可能是我太笨了,没成功。。。
原来那段代码是可以的,但是系统做了,项目没了,所以可能有点小错,但不知道是哪,谁能帮忙指出啊,感激不尽啊。
zhiwenyue 2009-07-29
  • 打赏
  • 举报
回复
我最近刚做的,给你看看
public void AddTree(int id, TreeNode pNode)
{
DataView dvTree = new DataView(dt);
//过滤ParentID,得到当前的所有子节点
string rowFilter = "["+columnParentId + "] = " + id.ToString();
dvTree.RowFilter = rowFilter;
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根节点
Node.Text = Row[nodeText].ToString();
Node.Name = Row[nodeName].ToString();
tv.Nodes.Add(Node);
AddTree(Int32.Parse(Row[columnId].ToString()), Node); //再次递归
}
else
{ //添加当前节点的子节点
Node.Text = Row[nodeText].ToString();
Node.Name = Row[nodeName].ToString();
pNode.Nodes.Add(Node);
AddTree(Int32.Parse(Row[columnId].ToString()), Node); //再次递归
}
}
}
wuyq11 2009-07-29
  • 打赏
  • 举报
回复
if(!IsPostBack)
{
BindJG();
}
private void BindJG()
{
DataSet ds = new DataSet();
//获取数据
DataTable dtb = ds.Tables[0];
TreeNode root = new TreeNode();
root.Value = "0";
root.Text = "";
root.ImageUrl = "../images/folder.gif";
root.Expanded = true;
this.TreeView1.Nodes.Add(root);
initTree(dtb, "", root);
this.TreeView1.ExpandAll();
}

protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)
{
DataView dv = new DataView(dt);

if (nFatherid == "")
dv.RowFilter = "depth='1'";
else
dv.RowFilter = "ParentId='"+nFatherid+"'";
foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if (fatherNode.Value == "0")
{
node.Value = Row["BH"].ToString();
node.Text = Row["mc"].ToString();
node.NavigateUrl = "";
node.ImageUrl = "../images/folder.gif";
fatherNode.ChildNodes.Add(node);
initTree(dt, Row["BH"].ToString(), node);
}
else
{
node.Text = Row["mc"].ToString();
node.Value = Row["BH"].ToString();
node.ImageUrl = "../images/jg.gif";
fatherNode.ChildNodes.Add(node);
}
}
}
调试看看
jasondct 2009-07-29
  • 打赏
  • 举报
回复
-----没有看你的代码
-----------给你个 参考 参考吧
protected void treeBind()
{

string strsql = "select * from tree";
DataSet myds = balcls.balds(strsql);
mydt = myds.Tables[0];
DataTable tempdt = mydt.Copy();
DataView dv = new DataView(tempdt);
dv.RowFilter = "depnum = 0";
if (dv.Count > 0)
{
foreach (DataRowView myrow in dv)
{
string depname = myrow["depname"].ToString().Trim();
TreeView1.Nodes.Add(new TreeNode(depname));
PopulateTreeView(depname, TreeView1.Nodes[0], myrow);
TreeView1.Nodes[0].Selected = true;
//trvDept.SelectedNode = trvDept.Nodes[0]; //选中第一个节点
}
}
}
private void PopulateTreeView(string parentPart, TreeNode parentNode, DataRowView parentRow)
{
string strdeptName = "";
DataTable temptbl = mydt.Copy();
DataView viewinfo = new DataView(temptbl);
//筛选获得当前传递过来的节点的子项,并将其添加到树形图中
//判断方法是凡parentIndex等于传递过来的节点的absIndex的,就是该节点的子项
viewinfo.RowFilter = "Parentid = '" + parentRow["depnum"].ToString().Trim() + "'";
//递归的添加每一个节点的所有子节点
foreach (DataRowView myRow in viewinfo)
{
strdeptName = myRow["depname"].ToString().Trim();
TreeNode myNode = new TreeNode(strdeptName);
//parentNode.Nodes.Add(myNode);
parentNode.ChildNodes.Add(myNode);
//函数递归调用,将所有节点按顺序添加完毕
PopulateTreeView(strdeptName, myNode, myRow);
}
}
laoban108 2009-07-29
  • 打赏
  • 举报
回复
里面哪出错了?TREEVIEW获取不到部门啊,部门号:DEPTID 部门名字:DEPTNAME 父级:PARENT_DEPT_ID 表名:HR_DEPARTMENT 我哪出错了?

110,586

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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