近日,因为工作需要用到了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);
                }            }
        }