DataSource моего DataGridView
- это BindingList<Filter>
, который содержит перечисление. В gridview содержатся только два столбца: обычный столбец текстовых полей для строки и столбец combobox (drop down) для перечисления. Если я привяжу столбец combobox к переменной enum моего объекта, я получу ошибку. Вот код для моих объектов:DataGridView не обновляет Enum в BindingList
public class FilterProfile
{
public FilterProfile()
{
filters = new BindingList<Filter>(); // the list that gets bound to gridview
}
public string name { get; set; }
public BindingList<Filter> filters { get; set; }
}
public class Filter
{
public string keyword { get; set; }
public FilterType type { get; set; } // the enum in question
}
public enum FilterType : int
{
SESSION = 1,
ORDER = 2,
SHIPMENT = 3
}
У меня есть форма, где пользователь выбирает FilterProfile
из выпадающего меню, а затем я найти подходящий FilterProfile из глобального списка и связать его:
foreach (PlvFilterProfile filterProfile in _filterProfiles)
{
// find the correct filter profile
if (filterProfile.name.Equals(lstFilterProfiles.Text))
{
// bind it
grdFilters.DataSource = filterProfile.filters;
break;
}
}
Чтобы изменения, внесенные в DataGridView, отражались в filterProfile.filters
Мне нужно установить атрибут DataPropertyName
обоих столбцов на их соответствующую переменную (либо keyword
, либо type
). Это корректно работает для строки keyword
, но не с перечислением .
Если я сохраню строку colFilterType.DataPropertyName = "type";
, я получаю ошибку ниже всякий раз, когда создается новая строка или когда я накладываю мышь на раскрывающийся список. Если я избавлюсь от него, то type
каждого вновь созданного фильтра будет установлен на 0
и никогда не будет обновлен.
Я не уверен, что вызывает событие DataError, так что не знаю, как справиться с этим или где останова.
вызвать dataerror событие в DataGridView в C# – SK2185