1. 程式人生 > >arcgis engine中圖層與資料表之間的join操作

arcgis engine中圖層與資料表之間的join操作

在進行join之前,請確認資料庫可以連線 

         try
            {
                //使用oledb連線資料庫,連線到sys.基本資訊表
                IWorkspaceFactory pWorkspaceFactory = new OLEDBWorkspaceFactory();
                IPropertySet pPropSet = new PropertySet();
                pPropSet.SetProperty("CONNECTSTRING","Provider=sqloledb;Data Source=" + this.instanceBox.Text + ";Initial Catalog=sys;User Id=sa;Password=sa;");
                IWorkspace pWorkspace = pWorkspaceFactory.Open(pPropSet,0);
                IFeatureWorkspace pFeatureWorkspace = (IFeatureWorkspace)pWorkspace;
                ITable pForeignTable = pFeatureWorkspace.OpenTable("sys.基本資訊表");

                //開啟已經修復好資料來源的temp.mxd
                IMapDocument pMapDocument = new MapDocumentClass();
                pMapDocument.Open(startPath + @"/temp.mxd",null);
                IMap pMap = pMapDocument.get_Map(0);

                //獲取圖層
                ILayer pLayer = null;
                for (int i = 0; i < pMap.LayerCount; i++)
                {
                    if (pMap.get_Layer(i).Name == "點位")
                    {
                        pLayer = pMap.get_Layer(i);
                    }
                }
                if (pLayer == null)
                {
                    MessageBox.Show("開啟地圖檔案(.mxd)失敗");
                    return;
                }

                //join
                IFeatureLayer pFLayer = (IFeatureLayer)pLayer;
                IFeatureClass pFClass2 = pFLayer.FeatureClass;
                IMemoryRelationshipClassFactory pMemRelClassFactory = new MemoryRelationshipClassFactoryClass();
                IRelationshipClass pRelaClass = pMemRelClassFactory.Open("TableJoin1",pFClass2,"點位編號",(IObjectClass)pForeignTable,"點位編號","forward","backward",esriRelCardinality.esriRelCardinalityOneToOne);
                IDisplayRelationshipClass pDisplayRelationshipC = (IDisplayRelationshipClass)pFLayer;
                pDisplayRelationshipC.DisplayRelationshipClass(pRelaClass,esriJoinType.esriLeftOuterJoin);
                pMapDocument.Save(false,true);
                pMapDocument.Close();

            }
            catch (System.Exception ex4)
            {
                MessageBox.Show(ex4.Message);
                return;
            }