Смена условного знака у нескольких слоев

0 голосов
спросил 26 Май, 06 от filippov70 (5,320 баллов) в категории Программные продукты Esri
Проблема еще и в том что перешел с VB на C# недавно

Загружаю несколько слоев из DataReader'a там вьюшка с дата соурсом слоя и его именем
В стиле имеются все нужные условные знаки - они имеют name как у слоя

поехали:

code
////////////////////

            pStyleGallery = pMxDocument.StyleGallery;
            pStyleStorage = (IStyleGalleryStorage)pStyleGallery;

            pEnumStyleGI = pStyleGallery.get_Items("Fill Symbols","ESRI.style","Default");

            pStyleGI = pEnumStyleGI.Next();


               
            while (ReadData.Read())
            {
                   
                pFeatureLayer = new FeatureLayerClass();

                   


                pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(System.Convert.ToString(ReadData["FEATURE"]));
                pFeatureLayer.Name = System.Convert.ToString(ReadData["NAME"]);
                   
                pFeatureLayer.Visible = false;

                   
                // разукраска

                pMyRender = null;
                pMyRender = (ISimpleRenderer)pRender;

                pEnumStyleGI = pStyleGallery.get_Items("Fill Symbols","ESRI.style","Default");

                pStyleGI = pEnumStyleGI.Next();


                while (pStyleGI != null)
                {

                   
                    if (Convert.ToString(pStyleGI.Name) == Convert.ToString(pFeatureLayer.Name))
                    {

                        //MessageBox.Show(Convert.ToString(pFeatureLayer.Name) + " - " + pStyleGI.Name,"");
                       
                        pFillSymbol = (IFillSymbol)pStyleGI.Item;

                        pMyRender.Symbol = (ISymbol)pFillSymbol;

                        pFeatureLayer.Renderer = (IFeatureRenderer)pMyRender;

                        break;
                    }

                    else

                    {

                        pStyleGI = pEnumStyleGI.Next();
                       
                    }
                                       
                }

                //



                pMap.AddLayer(pFeatureLayer);

                pMxDocument.ActiveView.ContentsChanged();
                pMxDocument.ActiveView.Refresh();
                pMxDocument.UpdateContents();
            }

            ReadData.Close();


////////////////////////
code

слои добавляются так - сначала первый (условный знак - как надо), далее второй (уз у него как надо и у предыдущего такой же), в конце концов - все загруженные слои имеют условный знак как у последнего загруженного.

Парюсь, блин. Хелп, кто могетCry

2 Ответы

0 голосов
ответил 26 Май, 06 от Tatkis (2,420 баллов)
Когда что-то делается в цикле, лучше использовать для присвоения промежуточный шаг через IClone.Clone
Попробуйте! Мне помогло.
0 голосов
ответил 26 Май, 06 от filippov70 (5,320 баллов)
Во как

    while (ReadData.Read())
            {
                   
                pFeatureLayer = new FeatureLayerClass();


                pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(System.Convert.ToString(ReadData["FEATURE"]));
                pFeatureLayer.Name = System.Convert.ToString(ReadData["NAME"]);
                   
                pFeatureLayer.Visible = false;
               

               
                pEnumStyleGI.Reset();
                IStyleGalleryItem pStyleGI = pEnumStyleGI.Next();

                while (pStyleGI != null)
                {
                    if (Convert.ToString(pStyleGI.Name) == Convert.ToString(pFeatureLayer.Name))
                    {
                        IFillSymbol pFillSymbol = (IFillSymbol)pStyleGI.Item;
                        ((ISimpleRenderer)pFeatureLayer.Renderer).Symbol=(ISymbol)pFillSymbol;
                       
                        MessageBox.Show(pStyleGI.Name);
                    }
                    pStyleGI = pEnumStyleGI.Next();
                }




                pMap.AddLayer(pFeatureLayer);

                pMxDocument.ActiveView.ContentsChanged();
                pMxDocument.ActiveView.Refresh();
                pMxDocument.UpdateContents();
            }

            ReadData.Close();
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...