表结构如下:mytable _________________________________________________________________________
OrgID/单位ID OrgName/单位名称 UpperOrgID/上级单位ID
A001 省教育厅 0 -----表示是顶级单位
A002 XX大学 A001
A003 XX大学理学院 A002
A004 YY大学 A001 _________________________________________________________________________
想实现的TreeView如下:-省教育厅
-XX大学
--XX大学理学院
-YY大学
--XX大学理学院 ----------------------------------------
代码如下,小弟运行后,树目录不显示。请问为什么?
谢谢
---------------------------------------
private void CreateTree()
{ string str = "Data Source=ECE-6D6D44DE2AD;Initial Catalog=Kqdb;Integrated Security=True";//数据库连接
SqlConnection conn = new SqlConnection(str);
conn.Open(); SqlCommand sqlcom = new SqlCommand("Select * from mytable where UpperOrgID='0'", conn);
try
{
conn.Open();
SqlDataReader sqlreader = sqlcom.ExecuteReader();
while (sqlreader.Read())
{
TreeNode mynode = new TreeNode();
mynode.Text = sqlreader.GetString(2);
mynode.Tag = sqlreader.GetValue(1).ToString() + '|' + sqlreader.GetValue(2).ToString() + '|' + sqlreader.GetValue(3).ToString() + '|' + sqlreader.GetValue(0).ToString();
treeView1.Nodes.Add(mynode); NextTree(sqlreader.GetValue(0).ToString(), treeView1.Nodes[0]);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
conn.Close();
}
} private void NextTree(string nodeid, TreeNode parentnode)
{
string str = "Data Source=ECE-6D6D44DE2AD;Initial Catalog=Kqdb;Integrated Security=True";//数据库连接
SqlConnection conn = new SqlConnection(str);
SqlCommand sqlcom = new SqlCommand("Select * from mytable where UpperOrgID='" + nodeid + "'",conn);
try
{
conn.Open();
SqlDataReader sqlreader = sqlcom.ExecuteReader(); while (sqlreader.Read())
{
TreeNode mynode = new TreeNode(sqlreader.GetString(2));
parentnode.Nodes.Add(mynode);
mynode.Tag = sqlreader.GetValue(1).ToString() + '|' + sqlreader.GetValue(2).ToString() + '|' + sqlreader.GetValue(3).ToString() + '|' + sqlreader.GetValue(0).ToString();
NextTree(sqlreader.GetValue(0).ToString(), mynode); } }
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
conn.Close();
} }
OrgID/单位ID OrgName/单位名称 UpperOrgID/上级单位ID
A001 省教育厅 0 -----表示是顶级单位
A002 XX大学 A001
A003 XX大学理学院 A002
A004 YY大学 A001 _________________________________________________________________________
想实现的TreeView如下:-省教育厅
-XX大学
--XX大学理学院
-YY大学
--XX大学理学院 ----------------------------------------
代码如下,小弟运行后,树目录不显示。请问为什么?
谢谢
---------------------------------------
private void CreateTree()
{ string str = "Data Source=ECE-6D6D44DE2AD;Initial Catalog=Kqdb;Integrated Security=True";//数据库连接
SqlConnection conn = new SqlConnection(str);
conn.Open(); SqlCommand sqlcom = new SqlCommand("Select * from mytable where UpperOrgID='0'", conn);
try
{
conn.Open();
SqlDataReader sqlreader = sqlcom.ExecuteReader();
while (sqlreader.Read())
{
TreeNode mynode = new TreeNode();
mynode.Text = sqlreader.GetString(2);
mynode.Tag = sqlreader.GetValue(1).ToString() + '|' + sqlreader.GetValue(2).ToString() + '|' + sqlreader.GetValue(3).ToString() + '|' + sqlreader.GetValue(0).ToString();
treeView1.Nodes.Add(mynode); NextTree(sqlreader.GetValue(0).ToString(), treeView1.Nodes[0]);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
conn.Close();
}
} private void NextTree(string nodeid, TreeNode parentnode)
{
string str = "Data Source=ECE-6D6D44DE2AD;Initial Catalog=Kqdb;Integrated Security=True";//数据库连接
SqlConnection conn = new SqlConnection(str);
SqlCommand sqlcom = new SqlCommand("Select * from mytable where UpperOrgID='" + nodeid + "'",conn);
try
{
conn.Open();
SqlDataReader sqlreader = sqlcom.ExecuteReader(); while (sqlreader.Read())
{
TreeNode mynode = new TreeNode(sqlreader.GetString(2));
parentnode.Nodes.Add(mynode);
mynode.Tag = sqlreader.GetValue(1).ToString() + '|' + sqlreader.GetValue(2).ToString() + '|' + sqlreader.GetValue(3).ToString() + '|' + sqlreader.GetValue(0).ToString();
NextTree(sqlreader.GetValue(0).ToString(), mynode); } }
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
conn.Close();
} }
这一直递归,都没add到树的node上去吧?
1 不论代码的对于错,楼主的递归没执行一次就要查询一次数据库,为什么不打数据一次性查询出来(数据量不大的情况下)。这样一直请求数据连接及操作。数据服务器压力太大了。
下面是我写的递归绑定Tree节点的函数,楼主可以参考一下,希望对你有帮助。
private void FillTreeViewItems(TreeViewItem tvItem,DataTable dt,string parentId)
{
TreeViewItem tmpItem;
string strFilter = string.Format("PARENTCODE='{0}'",parentId);
DataRow[] drTmp = dt.Select(strFilter);
foreach(DataRow dr in drTmp)
{
tmpItem = new TreeViewItem();
tmpItem.Header=dr["CODENAME"].ToString();
tmpItem.Tag = dr["CODE"].ToString();
tvItem.Items.Add(tmpItem);
FillTreeViewItems(tmpItem, dt, tmpItem.Tag.ToString());
} }