/// <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; }
} //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(); // обновляем строку статуса }