У меня есть datagridview со столбцом со списком, который привязан к перечислению следующим образом:
var D = (DataGridViewComboBoxColumn)dgvInputs.Columns[2];
D.ValueType = typeof(MyType);
D.ValueMember = "Value";
D.DisplayMember = "Display";
D.DataSource = new MyType[] {
MyType.Rev,
MyType.Model,
MyType.User,
MyType.Status
}.Select(x => new { Display = x.ToString(), Value = (int)x }).ToList();
Затем datagridview привязывается к DataTable с именем ParameterTable:
BindingSource ParamSource = new BindingSource();
ParamSource.DataSource = DataEntry.ParameterTable;
dgvInputs.AutoGenerateColumns = false;
dgvInputs.DataSource = ParamSource;
dgvInputs.Columns[0].DataPropertyName = "Name";
dgvInputs.Columns[1].DataPropertyName = "Prompt";
dgvInputs.Columns[2].DataPropertyName = "Type";
dgvInputs.Columns[3].DataPropertyName = "Width";
dgvInputs.Columns[4].DataPropertyName = "Default Value";
Когда пользователь закончит редактирование таблицы, мне нужно ее подтвердить. В частности, мне нужно проверить, что тип был определен в каждой строке и что значение по умолчанию совместимо с типом.
Проблема в том, что все тесты, которые я нашел для проверки того, был ли установлен тип, не удались. Когда позже я пытаюсь привести значение как MyType в рамках проверки значения по умолчанию, я получаю сообщение об ошибке. Когда я проверяю свойство .Value в пустой ячейке Type в отладчике, оно показывает значение "{}".
В настоящее время у меня есть этот код для теста в событии Validating для самого datagridview. Я пробовал различные другие версии, и они также потерпели неудачу:
foreach (DataGridViewRow Row in dgvInputs.Rows) {
if (!Row.IsNewRow) {
// test other columns ...
DataGridViewComboBoxCell Cell = (DataGridViewComboBoxCell)(Row.Cells[2]);
if (Cell == null || Cell.Value as string == string.Empty) {
// Error ...
}
MyType PType = (MyType)(Cell.Value);
Как я могу проверить, не была ли установлена ячейка DataGridViewComboBox, и что это за значение «{}»?
К сведению: я использую VS 2008 и .Net 3.5 SP1. Не мой выбор. Только то, что мне доступно.
DataEntry.ParameterTable
? - person Ivan Stoev   schedule 02.12.2015D.DataSource = Enum.GetValues(typeof(MyType));
. Я совершенно уверен, что по умолчанию произойдет следующее: отображение будет.ToString()
, а значение, очевидно, будет значением перечисления. - person Giora Guttsait   schedule 02.12.2015