初学C#,请问一个treeview显示数据库的分层数据并增删节点的问题,急,多谢!
被这个问题困扰几天了,要求生成一个树视图按照树形结构显示数据库中的数据,并且每增加、删除一个节点后端的数据库也相应着修改。
我的方法是用子节点表示法来存储这棵树,数据库中三个表项: index_id, parent_id, index_name,分别代表本节点id,父节点id,和本节点的显示节点名。节点的唯一标志号index_id自然是主键。
才刚毕业,开发经验还不多,对于控件的属性也不怎么熟悉。算法的思想倒是有,关于递归生成每一个子节点以及每删除一个节点后递归调用函数去遍历该节点的子节点也写了伪代码。但是具体实现的过程中麻烦多多,从数据库生成树的程序编译通过,运行时报了异常,无法初始化实例:
“未处理的“System.NullReferenceException”类型的异常出现在 treetest.exe 中
其他信息:未将对象引用设置到对象的实例。”
代码如下,请高手帮忙看一看,不能实例化的问题在哪里,如果能再给一个相关的数据库生成树视图的示例源码就更加感激不尽了,多谢!以前我看过相关的回答,是建议数据集转化成xml来实现的,但是我不了解xml的具体内容,因此希望能有直接和数据库关联操作的例子。
程序如下: 其中程序运行时中断在public Form1()处并报异常
namespace treetest
{
/// Form1 的摘要说明。
public class Form1 : System.Windows.Forms.Form
{
private System.Data.OleDb.OleDbConnection oleDbConnection1;
private System.Data.OleDb.OleDbCommand oleDbSelectCommand1;
private System.Data.OleDb.OleDbCommand oleDbInsertCommand1;
private System.Data.OleDb.OleDbCommand oleDbUpdateCommand1;
private System.Data.OleDb.OleDbCommand oleDbDeleteCommand1;
private treetest.DataSet1 dsViewtree; //数据集
private System.Data.OleDb.OleDbDataAdapter daViewtree; //数据适配器
private System.ComponentModel.Container components = null;
protected System.Windows.Forms.TreeView treeview1 ; //先定义一个树形控件
private void InitTree(TreeNodeCollection Nds,string parentId)
{
daViewtree.Fill(dsViewtree,"viewtree");
DataView dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=dsViewtree.Tables["viewtree"];
dv.RowFilter="parent_id="+"'" +parentId+"'";//筛选器,筛选结果数据表中parent_id是那些等于传进来parentId的行
foreach (DataRowView drv in dv)
{
tmpNd=new TreeNode();
string tmpNd_ID=drv["index_id"].ToString();
tmpNd.Text=drv["index_name"].ToString();
Nds.Add(tmpNd);
intId=drv["parent_id"].ToString();
InitTree(tmpNd.Nodes,tmpNd_ID);//递归地生成显示子树
}
}
public Form1()
{
InitializeComponent();
InitTree(treeview1.Nodes,"0"); //问题就出在这里,无法实例化,其中后面的“0”代表数据库中的根节点的id(已有此纪录)
}
protected override void Dispose( bool disposing )……
#region Windows Form Designer generated code
private void InitializeComponent()…… //这里的我就省略了
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
}
}
再次感谢!急切等待答案中……