0

我需要一个具有 GridLookupEdit 的 XtraGrid 控件来输入列值。

到目前为止我设法做的事情:

1) 我已经配置了 XtraGrid 控件

columns: ID, Name, Number
in-place GridLookUp Editors for Name and Number columns

2) 在表单加载事件中,我从数据库加载数据并设置 XtraGrid 数据源和 repositoryItem(..) 数据源、valuemember 和 displaymember

a) 数据加载到 XtraGrid 中,我可以激活单元格但不能从下拉列表中选择值(从 repositoryItem(..))或手动输入值(我可以激活“*”新行中的单元格但它有同样的问题 - 可以不要从下拉列表中选择或手动输入值)=> 为什么?

b)如果我没有为 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";

我错过了什么?

4

1 回答 1

1

问题是,我的数据源“模型”是一个列表,但它应该是具有属性 AllowNew==True 和 AllowEdit==True 的 BindingList。

在 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";
于 2013-03-17T21:49:49.537 回答