Проблемы установки 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 спросила, доступен ли источник данных только для чтения, я нашел этот пост, который наконец открыл мне глаза:

Проблема в DataGridView: пользователю кажется, что datagridview доступен только для чтения (WinForms)

правильная версия кода

    //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";
Другие вопросы по тегам