转换成XmlDocument
为了把有层次关系的数据邦定到树型控件或者菜单控件时,经常需要用到XmlDocument,因为数据源不是xml文件,而是保存到表中,通常这种表的字段会有一个ID和一个父ID,如果返回的一个数组,则我们需要把具有层次关系的数组转换成为XmlDocument然后邦定到控件上。
首先,先添加两个方法用来获取根节点下的一级子节点,以及获取某节点下的一级节点。
如:
然后,是两个辅助转换的方法:
首先,先添加两个方法用来获取根节点下的一级子节点,以及获取某节点下的一级节点。
如:
public PMBSCClass[] GetSubPMBSCClasses(Guid enterpriseUID, Guid bscClassUID)
public PMBSCClass[] GetRootPMBSCClasses(Guid enterpriseUID)
public PMBSCClass[] GetRootPMBSCClasses(Guid enterpriseUID)
然后,是两个辅助转换的方法:
public XmlDocument GetBscXmlDocment(Guid enterpriseUID)
{
XmlDocument doc = new XmlDocument();
XmlDeclaration declare = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes");//创建一个声明
doc.InsertBefore(declare, doc.DocumentElement);//把声明添加到文档元素的顶部
XmlElement root = doc.CreateElement("Nodes");//添加根节点
doc.AppendChild(root);
PMBSCClass[] rootBscs = GetRootPMBSCClasses(enterpriseUID);
if(rootBscs != null && rootBscs.Length > 0)
{
MakeDoc(doc, root, rootBscs);
}
return doc;
}
private void MakeDoc(XmlDocument doc, XmlElement rootElem, PMBSCClass[] bscs)
{
foreach(PMBSCClass bsc in bscs)
{
//创建子节点
XmlElement elem = doc.CreateElement("ItemNode");
rootElem.AppendChild(elem);
//创建新节点的Text属性
XmlAttribute textAtt = doc.CreateAttribute("Text");
textAtt.Value = bsc.Name;
elem.SetAttributeNode(textAtt);
//创建新节点的Value属性
XmlAttribute valueAtt = doc.CreateAttribute("Value");
valueAtt.Value = bsc.BSCClassUID.ToString();
elem.SetAttributeNode(valueAtt);
PMBSCClass[] subBscs = GetSubPMBSCClasses(bsc.EnterpriseUID, bsc.BSCClassUID);
if(subBscs != null && subBscs.Length > 0)
{
//如果当前元素有子元素,则递归生成字的节子点。
MakeDoc(doc, elem, subBscs);
}
}
}
{
XmlDocument doc = new XmlDocument();
XmlDeclaration declare = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes");//创建一个声明
doc.InsertBefore(declare, doc.DocumentElement);//把声明添加到文档元素的顶部
XmlElement root = doc.CreateElement("Nodes");//添加根节点
doc.AppendChild(root);
PMBSCClass[] rootBscs = GetRootPMBSCClasses(enterpriseUID);
if(rootBscs != null && rootBscs.Length > 0)
{
MakeDoc(doc, root, rootBscs);
}
return doc;
}
private void MakeDoc(XmlDocument doc, XmlElement rootElem, PMBSCClass[] bscs)
{
foreach(PMBSCClass bsc in bscs)
{
//创建子节点
XmlElement elem = doc.CreateElement("ItemNode");
rootElem.AppendChild(elem);
//创建新节点的Text属性
XmlAttribute textAtt = doc.CreateAttribute("Text");
textAtt.Value = bsc.Name;
elem.SetAttributeNode(textAtt);
//创建新节点的Value属性
XmlAttribute valueAtt = doc.CreateAttribute("Value");
valueAtt.Value = bsc.BSCClassUID.ToString();
elem.SetAttributeNode(valueAtt);
PMBSCClass[] subBscs = GetSubPMBSCClasses(bsc.EnterpriseUID, bsc.BSCClassUID);
if(subBscs != null && subBscs.Length > 0)
{
//如果当前元素有子元素,则递归生成字的节子点。
MakeDoc(doc, elem, subBscs);
}
}
}