首先向服务器发送请求:
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);
}
}
}