У меня есть пользовательский DataGridView с несколькими различными типами ячеек, которые наследуются от DataGridViewTextBoxCell и DataGridViewCheckBoxCell.Host Checkbox в DataGridViewTextBoxCell
Каждая из этих пользовательских ячеек имеет свойство устанавливать цвет фона (необходимый для некоторых функций сетки), называемый CellColour.
Для простоты мы возьмем два из пользовательских ячеек:
public class FormGridTextBoxCell : DataGridViewTextBoxCell
{
public Color CellColour { get; set; }
...
}
public class FormGridCheckBoxCell : DataGridViewCheckBoxCell
{
public Color CellColour { get; set; }
...
}
ПРОБЛЕМА:
Это означает, что каждый раз, когда я хочу, чтобы установить свойство CellColour для сетки Его, которая содержит столбцы как Введите FormGridTextBoxColumn и FormGridCheckBoxColumn (которые имеют CellTemplaes вышеупомянутых типов пользовательских ячейки соответственно) я должен сделать следующее:
if(CellToChange is FormGridTextBoxCell)
{
((FormGridTextBoxCell)CellToChange).CellColour = Color.Red;
}
else if (CellToChange is FormGridCheckBoxCell)
{
((FormGridCheckBoxCell)CellToChange).CellColour = Color.Red;
}
Когда у вас есть 3+ разных типа ячеек, это становится трудным, и я убежден, что есть лучший способ сделать это.
РЕШЕНИЕ ЗАПРАШИВАЕМЫЕ:
У меня есть это в моей голове, что если я могу создать единственный класс, который наследует от DataGridViewTextBoxCell, а затем иметь пользовательские типы Cell, в свою очередь наследуют от этого класса:
public class FormGridCell : DataGridViewTextBoxCell
{
public Color CellColour { get; set }
}
public class FormGridTextBoxCell : FormGridCell
{
...
}
public class FormGridCheckBoxCell : FormGridCell
{
...
}
Я тогда только нужно сделать следующее:
if(CellToChange is FormGridCell)
{
((FormGridCell)CellToChange).CellColour = Color.Red;
...
}
Независимо от того, сколько типов пользовательских сотовых есть (как все они будут наследовать от FormGridCell); любые типы управляемых управляемых ячеек будут внедрять в них элементы управления Windows Forms.
ПОЧЕМУ ЭТО ПРОБЛЕМА:
Я попытался после этой статьи:
Host Controls in Windows Forms DataGridView Cells
Это работает для пользовательских DateTime Picker однако хостинг галку в DataGridViewTextBoxCell является другой коленкор так как существуют различные свойства для управления значением ячеек.
Если есть более простой способ начать с DataGridViewTextBoxCell и изменить тип данных в унаследованных классах на заранее определенный тип данных более легко, чем это, тогда я открыт для предложений, однако основная проблема заключается в размещении флажка в пределах DataGridViewTextBoxCell.
Именно это я и сделал. Большое спасибо! И да, корень проблемы был в основном из-за того, что он мог наследовать только из одного базового класса. –