//为xml节点赋数据源,递归调用 private bool SetAttriOfXmlnode(DevComponents.AdvTree.Node pNode, XmlDocument pXmldoc) { //判断参数是否有效 if (pNode == null) { return(false); } string strTag = pNode.Tag.ToString(); string strNodeName = strTag; if (strNodeName.Contains("DataDIR")) { strNodeName = "DataDIR"; } switch (strNodeName) { case "Root": case "DIR": case "DataDIR": if (pNode.Nodes.Count > 0) { for (int i = 0; i < pNode.Nodes.Count; i++) { DevComponents.AdvTree.Node pTmpNode = pNode.Nodes[i]; SetAttriOfXmlnode(pTmpNode, pXmldoc); } //string strNodeKey = pNode.Name; //XmlNode pNewXmlNode = pXmldoc.SelectSingleNode("//" + strNodeName + "[@NodeKey='" + strNodeKey + "']"); //if (pNewXmlNode != null) //{ // pNode.DataKey = pNewXmlNode as object; //} } break; case "Layer": try { string strSearch = "//" + strNodeName + "[@NodeKey='" + pNode.Name + "']"; XmlNode pXmlnode = pXmldoc.SelectSingleNode(strSearch); if (pXmlnode == null) { return(false); } if (!(pXmlnode is XmlElement)) { return(false); } XmlElement pNodeEle = pXmlnode as XmlElement; if (chkLoad.Checked) { pNodeEle.SetAttribute("Load", "1"); } else { pNodeEle.SetAttribute("Load", "0"); } if (chkView.Checked) { pNodeEle.SetAttribute("View", "1"); } else { pNodeEle.SetAttribute("View", "0"); } string strDataType = pNodeEle.GetAttribute("DataType"); XmlNode nodeShow = pXmlnode["AboutShow"]; //为AboutShow节点写属性 XmlElement eleShow = nodeShow as XmlElement; if (nodeShow == null) { eleShow = pXmldoc.CreateElement("AboutShow"); nodeShow = pXmlnode.AppendChild(eleShow as XmlNode); } if (eleShow != null) { if (strDataType.ToUpper().Equals("FC")) { eleShow.SetAttribute("IsEdit", chkEdit.Checked.ToString()); eleShow.SetAttribute("IsQuery", chkQuery.Checked.ToString()); eleShow.SetAttribute("IsSelect", chkSelected.Checked.ToString()); } if (checkBoxMaxScale.Checked) { eleShow.SetAttribute("MaxScale", this.txtMaxScale.Text); } if (checkBoxMinScale.Checked) { eleShow.SetAttribute("MinScale", this.txtMinScale.Text); } } //added by chulili 20110630 非常重要,只有这样关联上,图层节点才能在视图浏览中正确显示 //pNode.DataKey = pXmlnode as object; ModuleMap.SetDataKey(pNode, pXmlnode); } catch (Exception e) { string strinfo = e.Message; } break; } return(true); }
//为xml节点赋数据源,递归调用 private bool SetDbsourceOfXmlnode(DevComponents.AdvTree.Node pNode, XmlDocument pXmldoc, string strDbsource, IWorkspace pWorkspace, List <IDataset> pListDataset, List <string> pListTypeOfDataset) { //判断参数是否有效 if (pNode == null) { return(false); } if (strDbsource.Equals("")) { return(false); } if (pWorkspace == null) { return(false); } string strTag = pNode.Tag.ToString(); string strNodeName = strTag; if (strNodeName.Contains("DataDIR")) { strNodeName = "DataDIR"; } switch (strNodeName) { case "Root": case "DIR": case "DataDIR": if (pNode.Nodes.Count > 0) { for (int i = 0; i < pNode.Nodes.Count; i++) { DevComponents.AdvTree.Node pTmpNode = pNode.Nodes[i]; SetDbsourceOfXmlnode(pTmpNode, pXmldoc, strDbsource, pWorkspace, pListDataset, pListTypeOfDataset); } //string strNodeKey = pNode.Name; //XmlNode pNewXmlNode = pXmldoc.SelectSingleNode("//" + strNodeName + "[@NodeKey='" + strNodeKey + "']"); //if (pNewXmlNode != null) //{ // pNode.DataKey = pNewXmlNode as object; //} } break; case "Layer": try { bool tag = false; string strSearch = "//" + strNodeName + "[@NodeKey='" + pNode.Name + "']"; XmlNode pXmlnode = pXmldoc.SelectSingleNode(strSearch); if (pXmlnode == null) { return(false); } if (!(pXmlnode is XmlElement)) { return(false); } XmlElement pNodeEle = pXmlnode as XmlElement; //为节点设置数据源,后续还应添加数据集(数据集根据数据源、地物类名称得到) //added by chulili 20110725 从数据源获取地物类,得到地物类所在数据集 string strFeaClsName = pNodeEle.Attributes["Code"].Value.ToString(); string strDataType = pNodeEle.Attributes["DataType"].Value.ToString(); IFeatureWorkspace pFeaWks = pWorkspace as IFeatureWorkspace; if (pFeaWks != null) { //IFeatureClass pFeaCls = pFeaWks.OpenFeatureClass(strFeaClsName); //if (pFeaCls != null) //{ // IFeatureDataset pDataSet = pFeaCls.FeatureDataset; // if (pDataSet != null) // { // pNodeEle.SetAttribute("FeatureDatasetName", pDataSet.Name); // } // else // { // pNodeEle.SetAttribute("FeatureDatasetName", ""); // } //} //else//直接根据名称获取不到 //{ string TrueFeaClsName = strFeaClsName.Substring(strFeaClsName.IndexOf(".") + 1); if (pListDataset != null) { if (strDataType.Equals("FC")) { for (int i = 0; i < pListDataset.Count; i++) //循环地物类集合 { if (tag) { break; //如果已经匹配上,跳出循环 } if (pListTypeOfDataset[i].Equals("FC")) { IDataset pDataset = pListDataset[i]; IEnumDataset pEnumDataset = pDataset.Subsets; IDataset ptmpDataset = pEnumDataset.Next(); while (ptmpDataset != null) //循环集合中的地物类 { string pFeaClsName = ptmpDataset.Name; if (pFeaClsName.Equals(strFeaClsName)) //先对整个地物类名称进行匹配 { pNodeEle.SetAttribute("FeatureDatasetName", pDataset.Name); pNodeEle.SetAttribute("Code", ptmpDataset.Name); tag = true; break; } ptmpDataset = pEnumDataset.Next(); } } } if (!tag) { for (int i = 0; i < pListDataset.Count; i++) //循环地物类集合 { if (tag) { break; //如果已经匹配上,跳出循环 } if (pListTypeOfDataset[i].Equals("FC")) { IDataset pDataset = pListDataset[i]; IEnumDataset pEnumDataset = pDataset.Subsets; IDataset ptmpDataset = pEnumDataset.Next(); while (ptmpDataset != null) //循环集合中的地物类 { string pFeaClsName = ptmpDataset.Name; if (pFeaClsName.Substring(pFeaClsName.IndexOf(".") + 1) == TrueFeaClsName) //再去掉用户名进行匹配 { pNodeEle.SetAttribute("FeatureDatasetName", pDataset.Name); pNodeEle.SetAttribute("Code", ptmpDataset.Name); tag = true; break; } ptmpDataset = pEnumDataset.Next(); } } } } } else if (strDataType.Equals("RC") || strDataType.Equals("RD")) { for (int i = 0; i < pListDataset.Count; i++) //循环地物类集合 { if (tag) { break; //如果已经匹配上,跳出循环 } if (pListTypeOfDataset[i].Equals("RC") || pListTypeOfDataset[i].Equals("RD")) { IDataset pDataset = pListDataset[i]; if (pDataset != null) //循环集合中的地物类 { string RCname = pDataset.Name; if (RCname.Equals(strFeaClsName)) //先对整个地物类名称进行匹配 { pNodeEle.SetAttribute("FeatureDatasetName", pDataset.Name); pNodeEle.SetAttribute("Code", pDataset.Name); pNodeEle.SetAttribute("DataType", pListTypeOfDataset[i]); tag = true; break; } } } } if (!tag) { for (int i = 0; i < pListDataset.Count; i++) //循环地物类集合 { if (tag) { break; //如果已经匹配上,跳出循环 } if (pListTypeOfDataset[i].Equals("FC") || pListTypeOfDataset[i].Equals("RD")) { IDataset pDataset = pListDataset[i]; if (pDataset != null) //循环集合中的地物类 { string pFeaClsName = pDataset.Name; if (pFeaClsName.Substring(pFeaClsName.IndexOf(".") + 1) == TrueFeaClsName) //再去掉用户名进行匹配 { pNodeEle.SetAttribute("FeatureDatasetName", pDataset.Name); pNodeEle.SetAttribute("Code", pDataset.Name); pNodeEle.SetAttribute("DataType", pListTypeOfDataset[i]); tag = true; break; } } } } } } } //} } //end added by chulili if (tag) { pNodeEle.SetAttribute("ConnectKey", strDbsource); } //added by chulili 20110630 非常重要,只有这样关联上,图层节点才能在视图浏览中正确显示 //pNode.DataKey = pXmlnode as object; ModuleMap.SetDataKey(pNode, pXmlnode); } catch (Exception e) { string strinfo = e.Message; } break; } return(true); }