所以我有这个,我知道这是错的:
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
,因为我需要添加项目,否则我会获得例外。
但是我看不到可用于获取列对象的属性。
我们如何从编辑控件中做到这一点?
进一步解释:
列表组合项由“列”对象添加。因此我们有一套15种颜色可供选择。现在我已经在列表顶部添加了一种genric颜色。
因此,用户调用编辑,删除列表显示,然后选择项目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 :(得分:1)
您可以使用EditingControlDataGridView
查找拥有编辑控件的DataGridView
。然后,您可以使用网格的CurrentCell
属性来查找当前单元格,使用ColumnIndex
您将找到列索引。然后使用Columns
集合,您可以获得该索引处的列:
var c = this.EditingControlDataGridView
.Columns[this.EditingControlDataGridView.CurrentCell.ColumnIndex]
as DataGridViewComboBoxColumn;
if (c != null)
c.Items.Add("Something");