操作数据库&TreeView

本文介绍了一种使用C#实现TreeView数据结构的存储与读取的方法。通过递归方式将TreeView中的节点信息保存到数据库,并能从数据库中读取这些信息重建TreeView。主要涉及的数据字段包括节点编号、节点名称及父节点编号。

说下TreeView,存到数据库,并保存结构;然后从数据库中取出来。下面把代码贴出来。请大家看看并指正出缺点。可以运行。呵呵。数据库设计。NodeID(节点编号),NodeName(节点名称),NodeParentID(父节点编号)
首先存入数据库:
public void SaveTemplateStruct(TreeNodeCollection tc)
  {
  conn.Open();
  string strNodeName = "";
  foreach (TreeNode TNode in tc)
  {
  if (TNode.Parent == null)
  {
  iNodeID = TNode.Index;
  iParentID = -1;
  strNodeName = TNode.Text.ToString();
  strNodeParentName = "00";
  iNodeIndex = 0;
  TNode.Tag = iNodeIndex;
  iNodeParentIndex = -1;

  }
  else
  {
  iNodeID++;
  strNodeName = TNode.Text.ToString();
  strNodeParentName = TNode.Parent.Text.ToString();
  if (TNode.Parent.Tag != null)
  {
  iNodeParentIndex = Convert.ToInt32(TNode.Parent.Tag);

  }
  TNode.Tag = iNodeID;
  iNodeIndex = TNode.Index;
  }
  string sql = "insert into template_struct (serial_number,serial_name,serial_parent_number) values (" + iNodeID + ", '" + strNodeName + "'," + iNodeParentIndex + ")";
  cmd = new SqlCommand(sql, conn);
  cmd.ExecuteNonQuery();
  conn.Close();
  SaveTemplateStruct(TNode.Nodes);
  }
  }


数据库中读取出来:

private void AddTree()
  {
  ds.Clear();
  tvTemplateList.Nodes.Clear();
  SqlDataAdapter da = new SqlDataAdapter("select * from template_struct order by serial_number", conn);
  da.Fill(ds, "tree");
  if (ds.Tables["tree"].Rows.Count > 0)
  {
  tvTemplateList.Nodes.Clear();
  foreach (DataRow dr in ds.Tables["tree"].Rows)
  {
  if ((int.Parse(dr["serial_number"].ToString()) == 0) && (int.Parse(dr["serial_parent_number"].ToString()) == -1))
  {
  TreeNode tr = new TreeNode();
  tr.Text = dr[2].ToString();
  tr.Tag = dr["serial_number"].ToString();
  tvTemplateList.Nodes.Add(tr);

  }
  }
  if (tvTemplateList.Nodes.Count > 0)
  {
  AddRoot(tvTemplateList.Nodes[0], ds);
  }
  }
  else
  {
  MessageBox.Show("warning");
  }
  }
  private void AddRoot(TreeNode tr, DataSet ds)
  {
  foreach (DataRow dr in ds.Tables["tree"].Rows)
  {

  if (dr[3].ToString() == tr.Tag.ToString())
  {
  TreeNode tr1 = new TreeNode();
  tr1.Text = dr[2].ToString();
  tr.Nodes.Add(tr1);
  tr1.Tag = dr["serial_number"].ToString();
  AddRoot(tr1, ds);
  }

  }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值