/// <summary>Обработка текущего выделения в DataGridView</summary>
        private void DataGridViewToSelection()
        {
            if (Core.current_document == null)
            {
                return;
            }

            if (this.is_suspended)
            {
                return;
            }

            this.is_suspended = true;                       // указываем, что идет обработка
            {
                if (this.data_grid.SelectedRows.Count == 0) // если нет выделенных строк
                {
                    Core.no_handle_selection = true;        // чтобы не очищалось DataGridView
                    Core.ClearImpliedSelection();
                }
                else                 // SelectedRows.Count > 0
                {
                    Autodesk.Gis.Map.Platform.AcMapMap curr_map = Autodesk.Gis.Map.Platform.AcMapMap.GetCurrentMap();
                    OSGeo.MapGuide.MgLayerCollection   layers   = curr_map.GetLayers();
                    OSGeo.MapGuide.MgSelectionBase     sel_base = new OSGeo.MapGuide.MgSelectionBase(curr_map);                 // новая пустая выборка FDO

                    // создание выборки (MgSelectionBase)
                    foreach (DataGridViewRow curr_row in this.data_grid.SelectedRows)
                    {
                        SelectedFeatureInfo sel_info = (curr_row.Cells[1].Value) as SelectedFeatureInfo;

                        if ((sel_info != null) && layers.Contains(sel_info.layer))
                        {
                            sel_base.AddFeatureIds(sel_info.layer, sel_info.layer.FeatureClassName, sel_info.properties);
                        }
                    }

                    // отражение выборки на карте
                    if (!autozoom_trigger)
                    {
                        CommandClass.SetImpliedSelectionBySelectionBase(sel_base);
                    }
                    else
                    {
                        CommandClass.ThroughAssZoomAndSelection(sel_base);
                    }
                }
            }
            this.is_suspended = false;
        }
        private void LayersList_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this.is_suspended)
            {
                return;
            }

            ComboBox layers_list = sender as ComboBox;

            this.is_suspended      = true;
            this.data_grid.Enabled = false;
            this.data_grid.SuspendLayout();             // замораживаем логику DataGridView
            {
                if (layers_list.SelectedIndex == 0)
                {
                    foreach (DataGridViewRow curr_row in this.data_grid.Rows)
                    {
                        curr_row.Visible = true;
                    }
                }
                else
                {
                    string layer_name = layers_list.SelectedItem as string;
                    foreach (DataGridViewRow curr_row in this.data_grid.Rows)
                    {
                        SelectedFeatureInfo sel_info = (curr_row.Cells[1].Value) as SelectedFeatureInfo;
                        if (sel_info == null)
                        {
                            continue;
                        }
                        curr_row.Visible = (sel_info.layer.Name == layer_name);
                    }
                }
            }
            this.data_grid.Enabled = true;
            this.data_grid.ResumeLayout();             // размораживаем логику DataGridView
            this.is_suspended = false;
        }
Exemple #3
0
        }        //method

        internal static void SelectionToDataGridView(MgSelectionBase _selection_base)
        {
            palette_window.links_control.is_suspended = true;         // информируем о заморозке
            palette_window.links_control.SuspendLayout();             // замораживаем логику
            palette_window.links_control.data_grid.Enabled = false;
            palette_window.links_control.data_grid.SuspendLayout();   // замораживаем логику DataGridView
            palette_window.links_control.layers_list.Enabled = false;

            palette_window.links_control.progressbar_in_status.Visible = true;             // включение ProgressBar
            palette_window.links_control.status_strip.Refresh();



            MgReadOnlyLayerCollection layers = _selection_base.GetLayers();

            int curr_features_count = 0, features_count = 0;

            // подсчет количества выбранных объектов
            foreach (MgLayerBase layer in layers)
            {
                features_count += _selection_base.GetSelectedFeaturesCount(layer, layer.FeatureClassName);
            }

            if (features_count == 0)
            {
                return;
            }

            // заполнение списка слоев
            palette_window.links_control.layers_list.Items.Clear();             // очищаем список

            if (layers.Count > 1)
            {
                palette_window.links_control.layers_list.Items.Add("(Все выбранные)");
            }

            foreach (MgLayerBase layer in layers)
            {
                palette_window.links_control.layers_list.Items.Add(layer.Name);
            }
            palette_window.links_control.layers_list.SelectedIndex = 0;

            // заполнение DataGridView
            palette_window.links_control.data_grid.Rows.Clear();              // очищаем строки

            foreach (MgLayerBase layer in layers)
            {
                int curr_ftr_class_idx = config.IndexOf(layer.FeatureClassName);
                if (curr_ftr_class_idx == -1)
                {
                    curr_features_count += _selection_base.GetSelectedFeaturesCount(layer, layer.FeatureClassName);;
                    palette_window.links_control.UpdateStatusRowCounterLabelAndProgressBar(curr_features_count, features_count);
                    continue;
                }
                FeatureClassLinkInfo curr_link_info = config.link_info_array[curr_ftr_class_idx];

                MgFeatureReader ftr_rdr = _selection_base.GetSelectedFeatures(layer, layer.FeatureClassName, false);

                MgPropertyDefinitionCollection identity_prop_defs = ftr_rdr.GetClassDefinition().GetIdentityProperties();                 // получаем набор идентификационных полей

                while (ftr_rdr.ReadNext())
                {
                    curr_features_count++;

                    DataGridViewRow link_row = new DataGridViewRow();   // новая строка

                    DataGridViewLinkCell link_cell;                     // ячейка

                    // формирование URL
                    link_cell = new DataGridViewLinkCell();

                    string title_str = ResolveLinkStringByValueFromReader(ftr_rdr, curr_link_info.LinkTitle);
                    link_cell.Value       = String.IsNullOrEmpty(title_str)? "<Null>": title_str;
                    link_cell.ToolTipText =
                        curr_link_info.LinkCommandPath
                        + command_splitter
                        + ResolveLinkStringByValueFromReader(ftr_rdr, curr_link_info.LinkURL);
                    link_row.Cells.Add(link_cell);                     // вставка ячейки

                    // формирование ID
                    MgPropertyCollection curr_identity_props = GetPropertiesFromReader(ftr_rdr, identity_prop_defs);

                    SelectedFeatureInfo sel_info = new SelectedFeatureInfo(layer, curr_identity_props);
                    link_cell       = new DataGridViewLinkCell();
                    link_cell.Value = sel_info;
                    link_row.Cells.Add(link_cell);                     // вставка ячейки

                    // добавлени строки в DataGridView
                    palette_window.links_control.data_grid.Rows.Add(link_row);

                    // обновление ProgressBar'а и счетчика строк
                    palette_window.links_control.UpdateStatusRowCounterLabelAndProgressBar(curr_features_count, features_count);
                }                                                                               /// while (ftr_rdr.ReadNext())
            }                                                                                   /// foreach (MgLayerBase layer in layers)

            palette_window.links_control.URL.SortMode = DataGridViewColumnSortMode.NotSortable; // сброс сортировки
            palette_window.links_control.URL.SortMode = DataGridViewColumnSortMode.Automatic;   // на исходную автоматическую

            palette_window.links_control.data_grid.SelectAll();                                 // выбираем все строки

            palette_window.links_control.progressbar_in_status.Visible = false;

            palette_window.links_control.layers_list.Enabled = true;
            palette_window.links_control.data_grid.Enabled   = true;
            palette_window.links_control.data_grid.ResumeLayout();   // размораживаем логику DataGridView
            palette_window.links_control.ResumeLayout();             // размораживаем логику
            palette_window.links_control.is_suspended = false;

            palette_window.links_control.UpdateStatusRowCounterLabel();             // обновляем строку статуса
        }