搞了半天,连个树的节点都没生成,请问错在哪,呜呜呜

昵称是可以中文吗 2011-04-30 06:16:28
我是从表读数据,生成树,把树放在放在groupbox显示,结果运行什么东西都没有,~~~~(>_<)~~~~

代码如下:

connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=abc.mdb";
。。。
using (OleDbConnection conn = new OleDbConnection(connectionString))
{

string OleDb = "select * from tTableEasy where fid=1";
OleDbCommand cmd = new OleDbCommand(OleDb, conn);
try
{
conn.Open();
OleDbDataReader reader=cmd.ExecuteReader();
TreeNode node = new TreeNode(reader["fName"].ToString());
node.Tag = reader["fLevel"].ToString();
node.Name = reader["fid"].ToString();
treeView1.Nodes.Add(node.Name);//把以上节点加入到根节点
List<TreeNode> A=new List<TreeNode>();
cmd.CommandText = "select * from tTableEasy where fLevel = " + 1 + " and fParentid = " + node.Name;
cmd.Connection = conn;
OleDbDataReader reader1 = cmd.ExecuteReader();
A.Add(new TreeNode(reader1["fName"].ToString()));
//遍历生成所有树
while (reader.Read())
{
foreach (TreeNode node1 in A)
{
cmd.CommandText = "select * from tTableEasy where fLevel = " +(node1.Level+1) + " and fParentid = " + node1.Name;
cmd.Connection = conn;
TreeNode NewNode = new TreeNode(reader1["fName"].ToString());
node1.Nodes.Add(NewNode);
node.Nodes.Add(node1);
}
}
reader.Close();
}
...全文
280 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐大法师 2011-05-01
  • 打赏
  • 举报
回复
TreeNode node = new TreeNode();
一般新建一个节点 就new一下就行了 什么都不加
node.name=什么什么
node.tag=什么什么
这样就行了
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 scauscnu 的回复:]
引用 16 楼 kkxxllasasas 的回复:
看不过去了 你把程序发过来 给你改 你写的太混乱了 数据库文件也发过来
sl0703@tom.com
bhcgdnr@gmail.com

调试了这句话好像错了,直接异常,不知错在哪
TreeNode node = new TreeNode(reader["fName"].ToString());//首先建立一个节点
[/Quote]
貌似搞定了,就差一个遍历。。。下面这两句话好像也有错的,
cmd.CommandText = "select * from tTableEasy where fLevel = " +(node1.Level+1) + " and fParentid = " + node1.Name;
cmd.Connection = conn;
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 kkxxllasasas 的回复:]
看不过去了 你把程序发过来 给你改 你写的太混乱了 数据库文件也发过来
sl0703@tom.com
bhcgdnr@gmail.com
[/Quote]
调试了这句话好像错了,直接异常,不知错在哪
TreeNode node = new TreeNode(reader["fName"].ToString());//首先建立一个节点
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 kkxxllasasas 的回复:]
看不过去了 你把程序发过来 给你改 你写的太混乱了 数据库文件也发过来
sl0703@tom.com
bhcgdnr@gmail.com
[/Quote]
恩,好的,谢谢
我把程序改了,就是显示根节点,然后结果还是什么都没

string OleDb = "select * from tTableEasy where fid=1";
OleDbCommand cmd = new OleDbCommand(OleDb, conn);
try
{
conn.Open();
OleDbDataReader reader=cmd.ExecuteReader();
TreeNode node = new TreeNode(reader["fName"].ToString());
node.Tag = reader["fLevel"].ToString();
node.Name = reader["fid"].ToString();
treeView1.Nodes.Add(node.Name);//把以上节点加入到根节点
快乐大法师 2011-05-01
  • 打赏
  • 举报
回复
private void a()
{

using (OleDbConnection conn = new OleDbConnection(connectionString))
{

string OleDb = "select * from tTableEasy where fid=1";
//创建OleDbCommand实例,并设置OleDb语句和使用的连接实例
OleDbCommand cmd = new OleDbCommand(OleDb, conn);
try
{
conn.Open();
OleDbDataReader reader = cmd.ExecuteReader();


TreeNode node = new TreeNode();//首先建立一个节点

while (reader.Read())
{
node.Tag = reader["fLevel"].ToString();//用Tag属性放层级关系
node.Name = reader["fid"].ToString(); //用Name属性放fid
node.Text = reader["fName"].ToString();
}
reader.Close();

string sql1 = "select * from tTableEasy where fLevel = " + 1 + " and fParentid = " + node.Name;
GetNodes(sql1, con, cmd, node);

treeView1.Nodes.Add(node);//把以上节点加入到根节点集合中





catch (Exception ex)
{
}
}
}

private void GetNodes(string sql, OleDbConnection con, OleDbCommand cmd, TreeNode treeNode)
{
cmd.CommandText = sql;
cmd.Connection = con;
OleDbDataReader reader1 = cmd.ExecuteReader();

List<TreeNode> A = new List<TreeNode>();
while (reader1.Read())
{
TreeNode node1 = new TreeNode();
node1.Tag = reader1["fLevel"].ToString();//用Tag属性放层级关系
node1.Name = reader1["fid"].ToString(); //用Name属性放fid
node1.Text = reader1["fName"].ToString();
A.Add(node1);
}

reader1.Close();
for (int i = 0; i < A.Count; i++)
{
int level = Convert.ToInt32(A[i].Tag) + 1;
string sql2 = "select * from tTableEasy where fLevel = " + level + " and fParentid = " + A[i].Name;

treeNode.Nodes.Add(A[i]);
GetNodes(sql2, con, cmd, A[i]);
}
}
快乐大法师 2011-05-01
  • 打赏
  • 举报
回复
数据库用sqlserver了 你参考一下

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=asd;User ID=sa; Password=sl86647049");

con.Open();

string sql = "select * from tTableEasy where fid=1";
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader reader = cmd.ExecuteReader();
TreeNode node = new TreeNode();//首先建立一个节点
while (reader.Read())
{
node.Tag = reader["fLevel"].ToString();//用Tag属性放层级关系
node.Name = reader["fid"].ToString(); //用Name属性放fid
node.Text = reader["fName"].ToString();
}
reader.Close();
//treeView1.Nodes.Add(node);//把以上节点加入到根节点集合中


string sql1 = "select * from tTableEasy where fLevel = " + 1 + " and fParentid = " + node.Name;
GetNodes(sql1, con, cmd, node);

treeView1.Nodes.Add(node);//把以上节点加入到根节点集合中

}

private void GetNodes(string sql, SqlConnection con, SqlCommand cmd, TreeNode treeNode)
{
cmd.CommandText = sql;
cmd.Connection = con;
SqlDataReader reader1 = cmd.ExecuteReader();

List<TreeNode> A = new List<TreeNode>();
while (reader1.Read())
{
TreeNode node1 = new TreeNode();
node1.Tag = reader1["fLevel"].ToString();//用Tag属性放层级关系
node1.Name = reader1["fid"].ToString(); //用Name属性放fid
node1.Text = reader1["fName"].ToString();
A.Add(node1);
}

reader1.Close();
for (int i = 0; i < A.Count; i++)
{
int level = Convert.ToInt32(A[i].Tag) + 1;
string sql2 = "select * from tTableEasy where fLevel = " + level + " and fParentid = " + A[i].Name;

treeNode.Nodes.Add(A[i]);
GetNodes(sql2, con, cmd, A[i]);
}
}

}
}
快乐大法师 2011-05-01
  • 打赏
  • 举报
回复
看不过去了 你把程序发过来 给你改 你写的太混乱了 数据库文件也发过来
sl0703@tom.com
bhcgdnr@gmail.com
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 kkxxllasasas 的回复:]

treeView1.Nodes.Add(node.Name);//把以上节点加入到根节点

这是什么意思啊
直接
treeView1.Nodes.Add(node);
[/Quote]
去掉后还是一个节点都没生成啊
快乐大法师 2011-05-01
  • 打赏
  • 举报
回复
treeView1.Nodes.Add(node.Name);//把以上节点加入到根节点

这是什么意思啊
直接
treeView1.Nodes.Add(node);
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 huangwenquan123 的回复:]
引用 11 楼 scauscnu 的回复:
引用 9 楼 huangwenquan123 的回复:

引用 8 楼 scauscnu 的回复:
引用 7 楼 huangwenquan123 的回复:

还是不要用你的方法吧,要递归个树,要连很多次数据库。而且sqldatareader独占的,一直到你循环完。效率肯定是不高的。
至于用datatable是为了存到viewstate中去,……
[/Quote]
哦哦,继续等
huangwenquan123 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 scauscnu 的回复:]
引用 9 楼 huangwenquan123 的回复:

引用 8 楼 scauscnu 的回复:
引用 7 楼 huangwenquan123 的回复:

还是不要用你的方法吧,要递归个树,要连很多次数据库。而且sqldatareader独占的,一直到你循环完。效率肯定是不高的。
至于用datatable是为了存到viewstate中去,这样下次不用查询的时候不用去查询数据库,当然你……
[/Quote]好吧,我以为是web的,原来是winform的.sorry
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 huangwenquan123 的回复:]

引用 8 楼 scauscnu 的回复:
引用 7 楼 huangwenquan123 的回复:

还是不要用你的方法吧,要递归个树,要连很多次数据库。而且sqldatareader独占的,一直到你循环完。效率肯定是不高的。
至于用datatable是为了存到viewstate中去,这样下次不用查询的时候不用去查询数据库,当然你也存到缓存里或...

请问你是不是asp的那个程序,V……
[/Quote]
我知道换成oledb,可是就是提示错误

错误 7 当前上下文中不存在名称“ViewState”

错误 5 “System.Windows.Forms.TreeNode”不包含“ChildNodes”的定义,并且找不到可接受类型为“System.Windows.Forms.TreeNode”的第一个参数的扩展方法“ChildNodes”(是否缺少 using 指令或程序集引用?)

错误 6 当前上下文中不存在名称“ConfigurationManager”
huangwenquan123 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 scauscnu 的回复:]
引用 7 楼 huangwenquan123 的回复:

还是不要用你的方法吧,要递归个树,要连很多次数据库。而且sqldatareader独占的,一直到你循环完。效率肯定是不高的。
至于用datatable是为了存到viewstate中去,这样下次不用查询的时候不用去查询数据库,当然你也存到缓存里或...

请问你是不是asp的那个程序,ViewState,node.ChildNode……
[/Quote]asp.net 我用的是mssql 数据库连接换成你的
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huangwenquan123 的回复:]

还是不要用你的方法吧,要递归个树,要连很多次数据库。而且sqldatareader独占的,一直到你循环完。效率肯定是不高的。
至于用datatable是为了存到viewstate中去,这样下次不用查询的时候不用去查询数据库,当然你也存到缓存里或...
[/Quote]
请问你是不是asp的那个程序,ViewState,node.ChildNodes怎么提示错误
huangwenquan123 2011-04-30
  • 打赏
  • 举报
回复
还是不要用你的方法吧,要递归个树,要连很多次数据库。而且sqldatareader独占的,一直到你循环完。效率肯定是不高的。
至于用datatable是为了存到viewstate中去,这样下次不用查询的时候不用去查询数据库,当然你也存到缓存里或...
  • 打赏
  • 举报
回复
另外一定要使用datatable,dataadapter吗?我那个程序好像没用到,我看看你的程序,先谢谢啦
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 huangwenquan123 的回复:]
C# code

protected void Page_Load(object sender, EventArgs e)
{
GetTable();
Bind_Tree(0, null);
}
public void Bind_Tree(int fid,TreeNode node)
{
DataTa……
[/Quote]
其实我那种方法是先生成一个根节点,然后在level为1的放进list A,然后就在A里面遍历生成,请问你可不可以帮我改一下,改完后另外加10分,我都搞了半天了
huangwenquan123 2011-04-30
  • 打赏
  • 举报
回复

    
protected void Page_Load(object sender, EventArgs e)
{
GetTable();
Bind_Tree(0, null);
}
public void Bind_Tree(int fid,TreeNode node)
{
DataTable dt = ViewState["Table"] as DataTable;
DataRow[] row = dt.Select("fParentid=" + fid + "");
foreach (DataRow r in row)
{
TreeNode n = new TreeNode(r["fname"].ToString(), r["fid"].ToString());
if (fid == 0)
TreeView1.Nodes.Add(n);
else
node.ChildNodes.Add(n);
Bind_Tree(Convert.ToInt32(r["fid"]), n);
}
}
public void GetTable()
{
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["daxueConnection"].ConnectionString;
conn.Open();
string strSql = "select fid,fname,fParentid from daxue";
SqlDataAdapter da = new SqlDataAdapter(strSql, conn);
DataTable dt = new DataTable();
da.Fill(dt);
ViewState["Table"] = dt;
}
}
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 whrspsoft3723 的回复:]
代码太乱, 跟踪下进去看一看.

cmd.CommandText = "select * from tTableEasy where fLevel = " +(node1.Level+1) + " and fParentid = " + node1.Name;
cmd.Connection = conn;
TreeNode NewNode = new TreeNode(reader……
[/Quote]
foreach和while那里已经查询了reader.Read()
就算我这里忽略掉,当我运行到下面,也至少输出个根节点吧,可是结果什么都没输出来,是不是加完后要设置属性或者方法使其显示??

conn.Open();
OleDbDataReader reader=cmd.ExecuteReader();
TreeNode node = new TreeNode(reader["fName"].ToString());
node.Tag = reader["fLevel"].ToString();
node.Name = reader["fid"].ToString();
treeView1.Nodes.Add(node.Name);//把以上节点加入到根节点
whrspsoft3723 2011-04-30
  • 打赏
  • 举报
回复
代码太乱, 跟踪下进去看一看.

cmd.CommandText = "select * from tTableEasy where fLevel = " +(node1.Level+1) + " and fParentid = " + node1.Name;
cmd.Connection = conn;
TreeNode NewNode = new TreeNode(reader1["fName"].ToString());
node1.Nodes.Add(NewNode);
node.Nodes.Add(node1);


没有查询就要加节点?


加载更多回复(1)

110,545

社区成员

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

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

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