1、TreeView控件与SQL数据库的应用遍历算法时间:2011-03-25 10:08来源:未知 作者:admin 点击: 363次我要投稿高质量的ASP.NET空间,完美支持1.0/2.0/3.5/4.0/MVC等开发环境:WinXP SP3,VS2008,SQL2000TreeView控件与SQL数据库的应用(遍历算法)(数据与TreeView的绑定及Treeview的增加、删除、修改、遍历等数据库的操作)这个是数据库连接及一些操作数据库的方法,文件:SqlManager.csusing System;using System.Collections.Generic;using Syste
2、m.Linq;using System.Text;using System.Data.SqlClient;using System.Data;using System.Windows.Forms;namespace TreeViewText class SqlManager SqlConnection conn; string strConn; public SqlManager() strConn = Data Source = .;Initial Catalog = TreeView; Integrated Security = SSPI; Persist Security Info =
3、False; User ID = sa; Password = sa; conn = new SqlConnection(strConn); public DataSet GetDataSet() DataSet ds = new DataSet(); SqlDataAdapter sda = new SqlDataAdapter(querySqlCmd, conn); try conn.Open(); sda.Fill(ds); catch (Exception ex) MessageBox.Show(ex.Message, 获取数据失败!); finally if (conn.State
4、= ConnectionState.Open) conn.Close(); return ds; public DataSet GetDataSet(string sqlCmd) DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(sqlCmd, conn); try conn.Open(); da.Fill(ds); catch (Exception ex) MessageBox.Show(ex.Message, 获取数据失败!); finally if (conn.State = ConnectionStat
5、e.Open) conn.Close(); return ds; public void RunSqlCommand(string sqlCmd) SqlCommand cmd = new SqlCommand(sqlCmd, conn); try conn.Open(); cmd.ExecuteNonQuery(); catch (Exception ex) MessageBox.Show(ex.Message, 操作数据库失败!); finally if (conn.State = ConnectionState.Open) conn.Close(); private string m_q
6、uerySqlCmd; #region 获取SQL语句 public string querySqlCmd get if (m_querySqlCmd = null) return select * from TreeNode; return querySqlCmd; set m_querySqlCmd = value; #endregion 主窗体:Form1.csusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;us
7、ing System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace TreeViewText public partial class Form1 : Form public Form1() InitializeComponent(); private void Form1_Load(object sender, EventArgs e) /TreeNode treeNode1 = new TreeNode(节点1, new TreeNode treeNode4,
8、treeNode5 ); /treeView1.Nodes.AddRange(new TreeNode treeNode1 ); #region TreeView节点编辑(没有修改数据库) private void btnEdit_Click(object sender, EventArgs e) if (treeView1.SelectedNode != null) if (!treeView1.SelectedNode.IsEditing) treeView1.SelectedNode.BeginEdit(); private void btnDelete_Click(object sen
9、der, EventArgs e) if (treeView1.SelectedNode != null) treeView1.SelectedNode.Remove(); private void btnAddNode_Click(object sender, EventArgs e) TreeNode treeNodeTemp = new TreeNode(GetNodeText(); if (treeView1.Nodes.Count 0) if (treeView1.SelectedNode != null) if (treeView1.SelectedNode.Parent != n
10、ull) treeView1.SelectedNode.Parent.Nodes.Add(treeNodeTemp); else treeView1.Nodes.Add(treeNodeTemp); else treeView1.Nodes.Add(treeNodeTemp); private void btnAddChild_Click(object sender, EventArgs e) TreeNode treeNodeTemp = new TreeNode(GetNodeText(); if (treeView1.SelectedNode != null) treeView1.Sel
11、ectedNode.Nodes.Add(treeNodeTemp); #region 获取文本框文本信息 / / 获取文本框文本信息 / / string private string GetNodeText() if (!String.IsNullOrEmpty(tbNodeName.Text.Trim() return tbNodeName.Text.Trim(); return TreeNode; #endregion #endregion / / 查询数据 / / / private void btnQuery_Click(object sender, EventArgs e) Sql
12、Manager sqlManager = new SqlManager(); dataGridView1.DataSource = sqlManager.GetDataSet(sqlManager.querySqlCmd).Tables0; /清空TreeView的内容 treeView1.Nodes.Clear(); /递归函数,0为根节点的父节点ParentID的值 AddTreeView(0, (TreeNode)null); /非递归(两层分类显示) /ShowTreeView(TreeNode)null); /展开所有树节点 /treeView1.Expand(); / / 退出程序
13、 / / / private void btnExit_Click(object sender, EventArgs e) this.Close(); #region 获得数据库信息放入TreeView中 (递归) private void AddTreeView(int ParentID, TreeNode parentNode) SqlManager sqlManager = new SqlManager(); DataView dataTree = new DataView(sqlManager.GetDataSet().Tables0); string filter = ParentI
14、D = + ParentID; dataTree.RowFilter = filter; foreach (DataRowView row in dataTree) TreeNode node = new TreeNode(); /处理根节点 if (parentNode = null) node.Name = rowID.ToString(); node.Text = rowName.ToString(); treeView1.Nodes.Add(node); AddTreeView(Int32.Parse(rowID.ToString().Trim(), node); /处理子节点 els
15、e node.Name = rowID.ToString(); node.Text = rowName.ToString(); parentNode.Nodes.Add(node); AddTreeView(Int32.Parse(rowID.ToString().Trim(), node); #endregion #region 获得数据库信息放入TreeView中 (非递归函数,根据Category来分类,仅支持两层分类) /*private void ShowTreeView(TreeNode pNode) treeView1.Nodes.Clear(); SqlManager sqlM
16、anager = new SqlManager(); DataView dataTree = new DataView(sqlManager.GetDataSet(select distinct Category from TreeNode).Tables0); foreach (DataRowView row in dataTree) TreeNode node = new TreeNode(); node.Text = rowCategory.ToString(); treeView1.Nodes.Add(node); CreateChildNodes(node); /获取第二层节点的的数
17、据 private void CreateChildNodes(TreeNode treenode) SqlManager sqlManager = new SqlManager(); DataView dataTree = new DataView(sqlManager.GetDataSet().Tables0); dataTree.RowFilter = Category = + treenode.Text + ; foreach (DataRowView row in dataTree) TreeNode node = new TreeNode(); node.Text = rowNam
18、e.ToString(); treenode.Nodes.Add(node); */ #endregion / / 添加记录 / / / private void btnAdd_Click(object sender, EventArgs e) SqlManager sqlManager = new SqlManager(); string insertSqlCmd = String.Empty; if (TextBoxValidator(tbParentID) MessageBox.Show(请输入ParentID(父节点), 提示); tbParentID.Focus(); else if
19、 (TextBoxValidator(tbName) MessageBox.Show(请输入Name(物品名称), 提示); tbName.Focus(); else if (TextBoxValidator(tbCategory) MessageBox.Show(请输入Category(物品类别), 提示); tbCategory.Focus(); else insertSqlCmd = insert into TreeNode (ParentID,Name,Category) values ( + tbParentID.Text.Trim() + , + tbName.Text.Trim(
20、) + , + tbCategory.Text.Trim() + ); sqlManager.RunSqlCommand(insertSqlCmd); dataGridView1.DataSource = sqlManager.GetDataSet(sqlManager.querySqlCmd).Tables0; treeView1.Nodes.Clear(); AddTreeView(0, (TreeNode)null); /treeView1.ExpandAll(); / / 修改记录 / / / private void btnModify_Click(object sender, Ev
21、entArgs e) SqlManager sqlManager = new SqlManager(); string updateSqlCmd = String.Empty; if (TextBoxValidator(tbID) MessageBox.Show(请先选择一个产品, 提示); else if (TextBoxValidator(tbParentID) MessageBox.Show(请输入ParentID(父节点), 提示); tbParentID.Focus(); else if (tbID.Text.Trim() = tbParentID.Text.Trim() Messa
22、geBox.Show(ID(产品ID)不能与ParentID(父节点)相同,请重新输入, 提示); tbParentID.Focus(); else if (TextBoxValidator(tbName) MessageBox.Show(请输入Name(物品名称), 提示); tbName.Focus(); else if (TextBoxValidator(tbCategory) MessageBox.Show(请输入Category(物品类别), 提示); tbCategory.Focus(); else updateSqlCmd = update TreeNode set Parent
23、ID = + tbParentID.Text.Trim() + ,Name = + tbName.Text.Trim() + ,Category = + tbCategory.Text.Trim() + where ID = + tbID.Text.Trim() + ; sqlManager.RunSqlCommand(updateSqlCmd); dataGridView1.DataSource = sqlManager.GetDataSet(sqlManager.querySqlCmd).Tables0; treeView1.Nodes.Clear(); AddTreeView(0, (T
24、reeNode)null); /treeView1.ExpandAll(); / / 删除记录 / / / private void btnRemove_Click(object sender, EventArgs e) if (treeView1.SelectedNode != null) TreeNode node = treeView1.SelectedNode; /删除所选节点及其所有子节点 DeleteTreeNode(node); SqlManager sqlManager = new SqlManager(); dataGridView1.DataSource = sqlMana
25、ger.GetDataSet(sqlManager.querySqlCmd).Tables0; / / 删除所选节点及其所有子节点 (通过遍历节点删除对应的数据库数据) / / private void DeleteTreeNode(TreeNode parentNode) /*方法一:删除选中节点及其所有子节点*/ int childCount = parentNode.Nodes.Count; for (int i = 0; i 0) DeleteTreeNode(childNode); else DeleteNodeData(childNode); childNode.Remove();
26、 if (parentNode.Nodes.Count = 0) DeleteNodeData(parentNode); parentNode.Remove(); /*方法二:删除选中节点及其所有子节点*/ /TreeNodeCollection treeNodeCollection = parentNode.Nodes; /int count = treeNodeCollection.Count; /for (int i = 0; i 0) / / DeleteTreeNode(node); / / else / / DeleteNodeData(node); / node.Remove(); / / /if (treeNodeCollection.Count = 0) / / DeleteNodeData(parentNode); / parentNode.Remove(); / / summ
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1