private DataSet ds;
private SqlDataAdapter sqlDataAdapter1;
private int maxnodeid;
private void Form1_Load(object sender, System.EventArgs e)
{
string strconn=ConfigurationSettings.AppSettings["ConnStr"];
sqlConnection1 = new SqlConnection(strconn);
this.sqlConnection1.Open();
//填充DataSet
this.CreateDataSet();
//从数据库中读取数据,通过递归生成树。
InitTree(this.treeView1.Nodes,"0");
}
private void CreateDataSet()
{
this.sqlDataAdapter1=new SqlDataAdapter("select * from s_menu ",this.sqlConnection1);
this.ds=new DataSet();
this.sqlDataAdapter1.Fill(ds,"tree");
}
private void InitTree(TreeNodeCollection Nds,string parentId)
{
DataView dv=new DataView();
TreeNode tmpNd;
string intId;
dv.Table=ds.Tables["tree"];
dv.RowFilter="ParentId='" + parentId + "'" ;
foreach(DataRowView drv in dv)
{
tmpNd=new TreeNode();
tmpNd.Tag=drv["NodeId"].ToString();
tmpNd.Text=drv["NodeName"].ToString();
Nds.Add(tmpNd);
intId=drv["ParentId"].ToString();
InitTree(tmpNd.Nodes,tmpNd.Tag.ToString());
}
}
//新增节点操作
private void insert(string type)
{//判断是新增树节点,还是子节点.
string strinsert="insert into s_menu values('{0}','{1}','{2}')";
string strformat="";
if(type=="sub")
strformat=string.Format(strinsert,maxnodeid.ToString(),this.selectnode.Tag.ToString(),this.strcomm);
else
strformat=string.Format(strinsert,maxnodeid.ToString(),"0",this.strcomm);
SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
cmd.ExecuteNonQuery();
}
//为新增节点算出最大的节点值,并以此值作为新增的节点ID值
private int GetMaxNodeid()
{
int pre=0,last=0;
DataSet maxds=new DataSet();
this.sqlDataAdapter1=new SqlDataAdapter("select nodeid from s_menu order by nodeid",this.sqlConnection1);
this.sqlDataAdapter1.Fill(maxds);
for(int i=0;i{
if(i+1{
pre=int.Parse(maxds.Tables[0].Rows[i][0].ToString());
last=int.Parse(maxds.Tables[0].Rows[i+1][0].ToString());
if(last-pre!=1)
return pre+1;
}
}
return last+1;
}
private void getallnode(TreeNode tn)
{
foreach(TreeNode node in tn.Nodes)
{
list.Add(node.Tag.ToString());
if(node.Nodes.Count>0)
{
getallnode(node);
}
}
}
private void treeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
//判断是否点击了某个节点
this.selectnode= this.treeView1.GetNodeAt (e.X ,e.Y );
if(selectnode==null)
this.isselected=false;
else
this.isselected=true;
}
private void menuAdd_Click(object sender, System.EventArgs e)
{//判断是否点击了某个节点,若没有点击了,则是新增一个树节点
if(isselected==false)
{//算出新增树节点的ID值
maxnodeid=GetMaxNodeid();
TreeNode tmpNd=new TreeNode();
//赋值
tmpNd.Tag=this.maxnodeid.ToString();
FormCommon frmCommon=new FormCommon();
DialogResult result= frmCommon.ShowDialog();
if(result==DialogResult.OK)
{//取到新增树节点的文本值
tmpNd.Text=frmCommon.strcomm;
this.strcomm=frmCommon.strcomm;
//新增树节点
this.treeView1.Nodes.Add(tmpNd);
//插入数据库(说明插入的是树节点)
this.insert("root");
//展开
this.selectnode.Expand();
}
}
else
{//判断是否点击了某个节点,若点击了,则是新增一个子节点
this.contextAddSub();
}
}
private void contextAddSub()
{//得到新增子节点的ID值
maxnodeid=GetMaxNodeid();
TreeNode tmpNd=new TreeNode();
//赋值
tmpNd.Tag=this.maxnodeid.ToString();
FormCommon frmCommon=new FormCommon();
DialogResult result= frmCommon.ShowDialog();
if(result==DialogResult.OK)
{//取到新增树节点的文本值
tmpNd.Text=frmCommon.strcomm;
this.strcomm=frmCommon.strcomm;
//新增子节点
this.selectnode.Nodes.Add(tmpNd);
//插入数据库(说明插入的是子节点)
this.insert("sub");
//展开
this.treeView1.SelectedNode.Expand();
}
}
//删除节点操作
private void menuDel_Click(object sender, System.EventArgs e)
{//新建一个ArrayList,用于保存要删除的节点下边的所有子节点
list=new ArrayList();
if(this.isselected==true)
{//得到删除的节点下边的所有子节点
getallnode(this.selectnode);
//把要删除的节点也加进去
list.Add(this.selectnode.Tag.ToString());
//循环从数据库中删除
for(int i=0;i{
string strdel="delete s_menu where nodeid='{0}'";
string strformat="";
strformat=string.Format(strdel,list[i]);
SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
cmd.ExecuteNonQuery();
}
//从树中删除
this.selectnode.Remove();
}
}
//修改节点的值
private void menuEdit_Click(object sender, System.EventArgs e)
{
if(this.isselected==true)
{
FormCommon frmCommon=new FormCommon();
DialogResult result= frmCommon.ShowDialog();
if(result==DialogResult.OK)
{
string strdel="update s_menu set nodename= '{1}' where nodeid='{0}'";
string strformat="";
strformat=string.Format(strdel,this.selectnode.Tag.ToString(),frmCommon.strcomm);
SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
cmd.ExecuteNonQuery();
this.selectnode.Text=frmCommon.strcomm;
}
}
}
//遍历所有节点.查找值
private void getvaluenode(TreeNodeCollection tn,string value)
{
foreach(TreeNode node in tn)
{
if(node.Nodes.Count>0)
{
getvaluenode(node.Nodes,value);
}
if(node.Text==value)
listnode.Add(node);
}
}
private void menuSearch_Click(object sender, System.EventArgs e)
{
int j,k;
this.listnode=new ArrayList();
FormCommon frmCommon=new FormCommon();
DialogResult result= frmCommon.ShowDialog();
if(result==DialogResult.OK)
{
TreeNode n =new TreeNode();
TreeNode temp=new TreeNode();
//下面的函数是填充listnode;
getvaluenode(this.treeView1.Nodes,frmCommon.strcomm);
for(int i=0;i{
j=0;k=0;
n=(TreeNode)listnode[i];
if (n != null)
{
temp=n;
//得到上面结点的数量,并将数量保存到变量j;
for(;n.Parent!=null;)
{
n=n.Parent;
j++;
}
//恢复原值
n=temp;
//新建一个树结点数组做保存得到查询到的所有节点.
TreeNode[] m=new TreeNode[j];
for(;n.Parent!=null;)
{
n=n.Parent;
m[k]=n;
k++;
}
for(int p=0;pm[p].Expand();
n=temp;
n.ForeColor=Color.Red;
}
}
}
}
private void treeView1_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e)
{
if(this.treeView1.SelectedNode.Text!=null)
{
string strdel="update s_menu set nodename= '{1}' where nodeid='{0}'";
string strformat="";strformat=string.Format(strdel,this.treeView1.SelectedNode.Tag.ToString(),e.Label.ToString());SqlCommand cmd=new SqlCommand(strformat,this.sqlConnection1);
cmd.ExecuteNonQuery();
}
}
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
this.listBox1.Items.Clear();
this.listBox1.Items.Add(this.treeView1.SelectedNode.FullPath.ToString());
}
}
}
转自Internet,原作者已佚
分享到:
相关推荐
总结,通过以上步骤,我们能够实现C# WinForm应用中`TreeView`控件与数据库的绑定,使用户能够方便地浏览和操作层次化数据。在实际项目中,还可以根据需求扩展功能,如添加编辑、删除节点的能力,或者使用异步加载...
在这个“winform,treeview数据库绑定数据类Demo”中,我们将探讨如何利用C#编程语言和.NET Framework将数据库中的数据绑定到TreeView控件上,特别是基于id、name和parent_id字段来构建层级关系。 首先,让我们理解...
在Windows Forms(Winform)开发中,TreeView控件是一个常用组件,用于展示层次结构的数据,如文件系统、组织结构等。然而,标准的TreeView控件默认仅支持单选操作,不提供多选功能。本教程将详细介绍如何在Winform...
总的来说,`C# WinForm`应用程序通过`DataGridView`和`TreeView`控件结合数据库,能提供直观且交互性强的用户界面。理解和熟练运用这两个控件的绑定机制,将大大提升你的应用程序的用户体验和功能完整性。在实际开发...
5. **处理事件**:为控件绑定事件处理器,如`NodeMouseClick`、`AfterSelect`等,实现特定功能。 6. **运行测试**:编译并运行项目,检查自定义`TreeView`是否按照预期工作。 总之,“好看的Winform.TreeView”是一...
在C# Windows Forms开发中,`TreeView`控件是一个常用且功能强大的组件,它能够以树形结构展示数据,非常适合用于表示层次结构的信息。本文将深入探讨如何实现`TreeView`控件的多层动态绑定,以帮助开发者更好地理解...
总之,C# WinForm中的TreeView控件结合数据库,可以方便地展示无限层级的层次数据。通过正确地构造数据库表结构,编写适当的查询和递归加载代码,我们可以轻松实现这一功能。在开发过程中,注意性能优化和代码的...
在本文中,我们将深入探讨如何在Winform应用中有效地利用Treeview控件,特别是在与数据库交互时动态添加、修改和管理节点。 1. **动态添加节点** 当你需要从数据库中获取数据并展示在Treeview上时,首先需要连接到...
总结来说,动态加载TreeView控件的值是Windows Forms开发中常见的任务,主要涉及数据库查询、数据绑定和递归算法的应用。通过这些技术,我们可以构建出能够灵活反映数据库结构的用户界面,提高用户体验。
在C#编程环境中,`DataGridView`(数据网格视图)和`TreeView`是两种非常重要的控件,广泛应用于创建用户界面,特别是在管理数据和展示层次结构信息时。这两个控件在许多信息系统(MIS,Management Information ...
在C# WinForm开发中,`TreeView`控件是一个常用组件,用于展示层次结构的数据。在某些场景下,我们可能需要在`TreeView`节点上添加复选框(Checkbox),以便用户可以多选节点。本文将深入讲解如何实现`TreeView`控件...
本文将详细讲解如何在C#的TreeView控件中实现这一功能。 首先,我们需要理解TreeView控件的基本结构和属性。TreeView控件由TreeNode对象组成,每个TreeNode可以包含子节点,形成一个层级结构。默认情况下,TreeView...
在C# WinForm开发中,TreeView控件是一个非常常见的组件,用于展示层次化的数据结构,如文件系统、组织结构或数据库记录。这个控件通过节点(TreeNode)来表示层级关系,用户可以方便地展开、折叠以及导航。在这个...
在C# WinForm开发中,TreeView控件是一个非常常用且功能强大的组件,它允许用户以树状结构展示数据。这个控件通常用于显示文件系统、应用程序的层级结构或者自定义的分类信息。以下是对"C# WinForm窗体treeview用法...
在Windows Forms(Winform)开发中,经常需要创建具有复杂交互功能的用户界面,比如将下拉列表(ComboBox)和树形视图(TreeView)结合起来的控件。这样的设计可以提供更加灵活的数据浏览和选择方式,尤其适用于层级...
在本文中,我们将深入探讨如何在Windows Forms或WPF应用中实现`TreeView`控件的多级节点绑定以及`ProgressBar`控件的功能,并将两者结合使用。`TreeView`控件通常用于显示层次结构数据,而`ProgressBar`则用于表示一...
在C#编程中,`TreeView`控件是一个非常常见的组件,用于展示层次化的数据结构,如文件系统、组织结构或数据库记录。这个实例是关于如何将数据有效地绑定到`TreeView`,使得用户能够以图形化的方式浏览和操作这些数据...
在.NET Framework中,C# WinForm TreeView控件是一个常用组件,用于展示层次结构的数据,如文件系统、组织结构或自定义数据模型。这个实例显然教你如何从数据库中获取数据并将其绑定到TreeView控件上,以便用户可以...
C#中的控件用法是非常重要的,尤其是在winform应用程序中。今天,我们将来学习一些基本的控件用法,包括Button、CheckBox、ComboBox、DataGridView、ListView、TreeView和MdiForm等。 Button控件 Button控件是...
综上所述,这个DEMO展示了如何在C# WinForm应用中使用`TreeView`控件创建树形菜单,并结合数据库进行动态数据加载。通过学习和实践这个DEMO,开发者可以掌握数据驱动的`TreeView`控件设计,以及如何利用ADO.NET进行...