需求:服务器端树状结构,客户端通过web service 读取该结构并显示。
方案:服务器端从资料库读取树状结构生成XML文档,以XML形式通过web service 发送到客户端。客户端解析XML文档生成树状结构
1、服务器端代码
如何建立 web service 不再详述。Web Service 分段上传大文件 一文中有详细描述。
[WebMethod(EnableSession=true)]
public XmlDocument GetWMFolder()
{
XmlDocument XmlSend = new XmlDocument();
XmlElement ParentNode;
XmlSend = new XmlDocument();
ParentNode = Xml.CreateElement(szName);
Xml.AppendChild(ParentNode);
ParentNode = XmlSend.CreateElement("WMFolder");
GetEIPWMFolder(0, ParentNode);
XmlSend.DocumentElement.AppendChild(ParentNode);
return XmlSend;
}
private void GetEIPWMFolder(int iWMFolderID, XmlElement ParentNode)
{
int i, iFolderID;
string szSql, szTitle;
DataTable RS;
XmlElement NewNode;
szSql = "select * from WMFolder where ParentID =" + iWMFolderID +" order by ViewOrder asc";
//Get Tatatable
RS = C.Comm.GetRecordSet(PagePara, szSql);
for (i = 0; i < RS.Rows.Count; i++)
{
iFolderID = C.Comm.RSInt(PagePara,RS, i, "WMFolderID");
szTitle = C.Comm.RSString(PagePara, RS, i, "Title");
NewNode = XmlSend.CreateElement("_"+szTitle);
SetAttr(NewNode, "Title", szTitle);
SetAttr(NewNode, "WMFolderID", iFolderID);
ParentNode.AppendChild(NewNode);
GetEIPWMFolder(iFolderID, NewNode);
}
}
private void SetAttr(XmlElement Node, string szAttrName, object Value)
{
Node.SetAttribute(szAttrName, "", Value.ToString());
}
2、客户端代码
private void LoadTree()
{
XmlNode XmlRecv;
XmlElement RecvAction, RecvWMFolder;
XmlNodeList TheWMFolder;
tvWMFolder.Nodes.Clear();
XmlRecv =HpService.GetWMFolder();
try
{
RecvAction = (XmlElement)XmlRecv.FirstChild;
}
catch
{
RecvAction = null;
}
if (RecvAction == null)
{
return;
}
TheWMFolder = RecvAction.ChildNodes;
for (int i = 0; i < TheWMFolder.Count; i++)
{
RecvWMFolder = (XmlElement)TheWMFolder.Item(i);
LoadEIPWMFolder(RecvWMFolder, null);
}
}
private void LoadEIPWMFolder(XmlElement WMFolderNode, TreeNode ParentNode)
{
int i, iWMFolderID;
string szTitle;
XmlElement RecvDataRow;
XmlNodeList TheChildNodes;
TreeNode NewNode;
TheChildNodes = WMFolderNode.ChildNodes;
for (i = 0; i < TheChildNodes.Count; i++)
{
RecvDataRow = (XmlElement)TheChildNodes.Item(i);
iWMFolderID = (int)GetAttr(RecvDataRow, "WMFolderID",0);
szTitle = GetAttr(RecvDataRow, "Title","");
NewNode = new TreeNode(szTitle);
NewNode.Tag = iWMFolderID;
if (ParentNode == null)
{
tvWMFolder.Nodes.Add(NewNode);
LoadEIPWMFolder(RecvDataRow, NewNode);
}
else
{
ParentNode.Nodes.Add(NewNode);
LoadEIPWMFolder(RecvDataRow, NewNode);
}
}
}
public static string GetAttr(XmlElement Node, string szAttrName, string szDefValue)
{
string szValue;
if ((Node != null) && (Node.Attributes[szAttrName] != null))
szValue = Node.Attributes[szAttrName].Value;
else
szValue = szDefValue;
return szValue;
}