Проблемы установки XtraGrid с помощью редакторов на месте (с использованием GridLookUpEdit)
Мне нужен элемент управления XtraGrid, который имеет GridLookupEdit для ввода значений столбца.
Что мне удалось сделать до сих пор:
1) Я настроил управление XtraGrid
columns: ID, Name, Number
in-place GridLookUp Editors for Name and Number columns
2) в форме "Событие загрузки" я загружаю данные из базы данных и устанавливаю источник данных XtraGrid и оба источника данных repositoryItem(..), valuemember и displaymember
a) Данные загружаются в XtraGrid, я могу активировать ячейку, но не могу выбрать значения из раскрывающегося списка (из repositoryItem(..)) или ввести значения вручную (я могу активировать ячейку в новой строке "*", но у нее есть та же проблема - может не выбрать из выпадающего списка или ввести значения вручную) => почему?
б) Если я не установил источник данных для XtraGrid, то оба раскрывающихся списка активны, и я могу выбрать значения, используя GridLookupEdit, но когда я выхожу из ячейки, ячейка очищается => Я считаю, что это потому, что в этом случае нет xtraGrid.DataSource установлен?
var model = (from TableA a in _dbE.TableA select new {ID, Name, Number}).ToList();
//if i comment this line out, then i can choose values from GridLookUpEdit
gridControl1.DataSource = model;
repositoryItemNosaukums.DataSource = model;
repositoryItemNosaukums.ValueMember = "ID";
repositoryItemNosaukums.DisplayMember = "Name";
repositoryItemPieteikumaNr.DataSource = model;
repositoryItemPieteikumaNr.ValueMember = "ID";
repositoryItemPieteikumaNr.DisplayMember = "Number";
Что мне не хватает?
1 ответ
Проблема состояла в том, что мой источник данных "модель" был List, но это должен был быть BindingList со свойствами AllowNew==True и AllowEdit==True.
После того, как служба поддержки DevExpress спросила, доступен ли источник данных только для чтения, я нашел этот пост, который наконец открыл мне глаза:
правильная версия кода
//no projections (select new ...) for IBindingList<T>..
//var model = (from TableA a in _dbE.TableA select new {ID, Name, Number}).ToList();
var model = (from TableA a in _dbE.TableA).ToList();
//convert to BindingList
var bindingModel= new BindingList<TableA>(model);
bindingModel.AllowNew=true;
bindingModel.AllowEdit=true;
//bind BindingList to datagrid
gridControl1.DataSource = bindingModel; //model;
//... no changes to repositoryItem(..) stuff
repositoryItemNosaukums.DataSource = model;
repositoryItemNosaukums.ValueMember = "ID";
repositoryItemNosaukums.DisplayMember = "Name";
repositoryItemPieteikumaNr.DataSource = model;
repositoryItemPieteikumaNr.ValueMember = "ID";
repositoryItemPieteikumaNr.DisplayMember = "Number";