所以我有这个,我知道这是错误的:喂养从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
,因为那是我需要添加项目的地方,否则我会得到例外。
但我不能看到一个属性我可以用它来获取列对象。
我们如何从编辑控制中做到这一点?
进一步的解释:
列表组合项由“列”对象增加。因此,我们有一组15种颜色可供选择。现在我已经在列表中添加了一个genric颜色。
因此,用户调用编辑,下拉列表显示,然后他们选择项目0.我们用前面提到的处理程序拦截它。由于他们选择了项目0,我们显示一个弹出式对话框让他们选择不同的颜色。
当他们选择时,我们现在必须找到它或将其添加到列的项目的强制性列表。现在有道理?
我试图使用DataGridView通知对象,但出于某种原因它没有显示在可用函数列表中。
我不使用数据源。我填充像这样在列构造:
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'属性? –