制作动态的TreeView

首先向服务器发送请求:

   

   DataTable dt = DeserializeDataTable(GetMenuData(DefineConst.guser));//向服务器发送请求获得datatable对象
	/// <summary>
		/// 反序列化DataTable
		/// </summary>
		/// <param name="pXml">序列化的DataTable</param>
		/// <returns>DataTable</returns>
		public static DataTable DeserializeDataTable(string pXml)
		{
            DataTable dt = new DataTable();
            try
            {
                StringReader strReader = new StringReader(pXml);
                XmlReader xmlReader = XmlReader.Create(strReader);
                XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
                
                dt = serializer.Deserialize(xmlReader) as DataTable;

                return dt;
            }
            catch (Exception e)
            {
                return dt;
            }
		}
服务器处理内容:


    public string GetMenuData(string userid)
    {
        string groupid = DefineConst.gusergroupid;

        string sql = @"select rightid,rightname,form_id,parentid
                        from mix_right_info";

        sql = string.Format(sql, groupid, userid);

        DataSet ds =getSet(sql);

        DataTable dt = new DataTable();

        if (ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0)
        {
            dt = ds.Tables[0];
        }

        dt.TableName = "TreeView";
        return SerializeDataTableXml(dt);
    }

	        /// <summary>
		/// 序列化DataTable
		/// </summary>
		/// <param name="pDt">包含数据的DataTable</param>
		/// <returns>序列化的DataTable</returns>
		public  static string SerializeDataTableXml(DataTable dt)
		{
			// 序列化DataTable
			StringBuilder sb = new StringBuilder();
			XmlWriter writer = XmlWriter.Create(sb);
			XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
			serializer.Serialize(writer, dt);
			writer.Close();

			return sb.ToString();
		}


客户端对DataTable操作生成树状结构:


 CreateMainMenu(dt, tvmenu)
		/// <summary>
		/// 生成树形菜单
		/// </summary>
		/// <param name="dt">datetable</param>
		/// <param name="tv">treeview</param>
		public static bool CreateMainMenu(DataTable dt, TreeView tv)
		{
			string parentid = "";
			foreach (DataRow dr in dt.Rows)
			{
				if (dr[3].ToString() == "1")
				{
					TreeNode tn = new TreeNode();
					tn.Name = dr[0].ToString();
					tn.Text = dr[1].ToString();
                    tn.Tag = dr[2].ToString();
					parentid = dr[3].ToString();
					tv.Nodes.Add(tn);
					tn.ImageIndex = 0;
					AddSubMenu(tn, dt, dr);
				}
			}
			return true;
		}
		/// <summary>
		/// 生成子菜单
		/// </summary>
		/// <param name="tn"></param>
		/// <param name="dt"></param>
		/// <param name="dr"></param>
		private static void AddSubMenu(TreeNode tn, DataTable dt, DataRow dr)
		{
			string parentid = "";
			foreach (DataRow ddr in dt.Rows)
			{
				if (ddr[3].ToString() == dr[0].ToString())
				{
					//ddr为dr的子节点
					TreeNode ttn = new TreeNode();
                    ttn.Name = ddr[0].ToString();//ttn.Name = ddr["窗体名称"].ToString();
                    ttn.Text = ddr[1].ToString();//ttn.Text = ddr["权限名称"].ToString();
                    parentid = ddr[3].ToString();//parentid = ddr["父级权限"].ToString();
                    ttn.Tag = ddr[2].ToString();
					ttn.ImageIndex = 0;
					ttn.SelectedImageIndex = 1;
					tn.Nodes.Add(ttn);
					AddSubMenu(ttn, dt, ddr);
				}
			}
		}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值