Пользовательский столбец ComboBox для DataGridView
У нас есть пользовательский ComboBox, работающий с формой, которая отображает некоторые фигуры вместо текста. Чтобы сделать это, мне нужно было переопределить функцию OnDrawItem, и она отображает то, что мы хотим. Вот фрагмент для справки:
protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem(e);
e.DrawBackground();
if (e.Index >= 0)
{
Brush brush = new SolidBrush(Color.LightGray);
int size = this.Height/2;
int origenX = e.Bounds.X + 1;
int origenY = e.Bounds.Y + 3;
System.Drawing.Drawing2D.GraphicsPath path =
new System.Drawing.Drawing2D.GraphicsPath();
switch (e.Index)
{
case 0:
e.Graphics.FillRectangle(brush, origenX, origenY, size, size);
Rectangle r = new Rectangle(origenX, origenY, size, size);
ControlPaint.DrawBorder(e.Graphics, r, Color.Black,
ButtonBorderStyle.Solid);
break;
case 1:
path.AddEllipse(origenX, origenY, size, size);
e.Graphics.FillPath(brush, path);
e.Graphics.DrawPath(Pens.Black, path);
break;
}
}
}
Итак, если вы добавите это в форму и добавите пару элементов в свою коллекцию, все, что вы увидите, это квадрат и круг в выпадающем списке.
Итак, теперь я хочу добавить это же поле со списком в DataGridView. Я знаю, что этот элемент управления имеет DataGridViewComboBoxColumn. Я пытался расширить элемент управления, однако я не вижу эту функцию OnDrawItem для переопределения. Я думаю, что существует что-то подобное? Любая помощь будет оценена. Спасибо!
1 ответ
Вам нужно интерпретировать DataGridViewComboBox как ваш собственный Combobox.
private void dgTest_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (dgTest.CurrentCell.ColumnIndex == 0) // Which column ever is your DataGridComboBoxColumn
{
// This line will enable you to use the DataDridViewCOmboBox like your
// Custom ComboBox.
CustomComboBox combo = e.Control as CUstomComboBox;
}
}