Пример #1
0
        //为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);
        }
Пример #2
0
        //为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);
        }