首先向伺服器發送請求:
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){// 序列化DataTableStringBuilder 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);}}}