1

Так я это, и я знаю, что это не так:Кормление значение переопределения от OnSelectionChangeCommitted DataGridViewComboBoxEditingControl для объекта столбца

protected override void OnSelectionChangeCommitted(EventArgs e) 
{ 
    if (SelectedIndex == 0) 
    { 
     GENIO_Viewer.FullColourPaletteForm dlgColour = new GENIO_Viewer.FullColourPaletteForm(); 
     if(dlgColour.ShowDialog() == DialogResult.OK) 
     { 
      bool bFound = false; 
      for(int i = 1; i < Items.Count; i++) 
      { 
       ComboboxColourItem ocbItem = (ComboboxColourItem)Items[i]; 
       if(ocbItem.Index == dlgColour.iSelectedColour) 
       { 
        SelectedIndex = i; 
        bFound = true; 
        break; 
        // We can just select this one 
       } 
      } 
      if(!bFound) 
      { 
       // Add it 
       ComboboxColourItem ocbItem = ComboboxColourItem.Create((ushort)dlgColour.iSelectedColour); 
       Items.Add(ocbItem); 
       SelectedIndex = Items.Count - 1; 
      } 
     } 
    } 

    base.OnSelectionChangeCommitted(e); 
} 

Этот обработчик является частью моей DataGridViewComboBoxEditingControl. Но это неправильное место для добавления нового Items.

Я не могу тренироваться, как получить доступ к собственному Column, так как там мне нужно добавить элемент, иначе я получаю исключения.

Я смотрел здесь: https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxeditingcontrol(v=vs.110).aspx

Но я не могу видеть свойство можно использовать, чтобы получить объект столбца.

Как это сделать с помощью элемента управления редактирования?

Далее объяснения:

Список комбинированных элементы добавляются в «колонке» объект. Таким образом, у нас есть набор из 15 цветов на выбор. Теперь я добавил genric color tot he top of the list.

Таким образом, пользователь вызывает отображение изменений, показаний датчика, и они выбирают элемент 0. Мы перехватываем это с помощью вышеупомянутого обработчика. Поскольку они выбрали элемент 0, мы показываем всплывающий диалог, чтобы они могли выбрать другой цвет.

Когда они выбрали, мы должны либо найти его, либо добавить в обязательный список элементов для столбца. Теперь есть смысл?

Я попытался использовать объект DataGridView Notify, но по какой-то причине он не отображается в списке доступных функций.

Я не использую DataSource. Я заселить, как это в конструкторе столбцов:

private void InitialiseComboItems() 
{ 
    List<ushort> listColours = new List<ushort>(); 
    listColours.Add(0); 
    listColours.Add(1); 
    listColours.Add(2); 
    listColours.Add(3); 
    listColours.Add(4); 
    listColours.Add(5); 
    listColours.Add(6); 
    listColours.Add(7); 
    listColours.Add(8); 
    listColours.Add(9); 
    listColours.Add(250); 
    listColours.Add(251); 
    listColours.Add(252); 
    listColours.Add(253); 
    listColours.Add(254); 
    listColours.Add(255); 

    this.Items.Clear(); 
    foreach (ushort iColourIndex in listColours) 
     this.Items.Add(ComboboxColourItem.Create(iColourIndex)); 
} 

У меня также есть вспомогательный метод:

public ComboboxColourItem InsertColour(ushort iColourIndex) 
{ 
    ComboboxColourItem ocbItem = ComboboxColourItem.Create(iColourIndex); 

    bool bAppend = true; 
    if (Items.Count > 16) 
    { 
     // There are other colours, need to find right index 
     for(int i = 16; i < Items.Count; i++) 
     { 
      if(ocbItem.Index < ((ComboboxColourItem)Items[i]).Index) 
      { 
       bAppend = false; 
       Items.Insert(i, ocbItem); 
       break; 
      } 
     } 
    } 
    if (bAppend) 
     Items.Add(ocbItem); 

    return ocbItem; 
} 
+0

Как вы добавили элементы в столбец? Установив свойство 'DataSource'? –

ответ

1

Вы можете использовать EditingControlDataGridView найти DataGridView владеющую контроль редактирования. Затем вы можете использовать свойство сетки CurrentCell, чтобы найти текущую ячейку, и используя ColumnIndex, вы найдете индекс столбца. Затем, используя коллекцию Columns, вы можете получить столбец по этому индексу:

var c = this.EditingControlDataGridView 
      .Columns[this.EditingControlDataGridView.CurrentCell.ColumnIndex] 
      as DataGridViewComboBoxColumn; 
if (c != null) 
    c.Items.Add("Something"); 
+0

Прочтите обновленный ответ. –

+1

Это работает хорошо! Я не знал об этом объекте 'EditingControlDataGridView'. Единственное, что мне нужно было сделать, это также добавить тот же объект в список элементов управления редактирования, чтобы избежать исключения:' Items.Insert (i, ocbItem); ' –