Так я это, и я знаю, что это не так:Кормление значение переопределения от 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;
}
Как вы добавили элементы в столбец? Установив свойство 'DataSource'? –