我需要一个具有GridLookupEdit的XtraGrid控件来输入列值。
到目前为止,我成功地做到了:
1)我已经配置了XtraGrid控件
columns: ID, Name, Number
in-place GridLookUp Editors for Name and Number columns2)在表单加载事件上,我从数据库加载数据并设置XtraGrid数据源和repositoryItem(..)datasource、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";我遗漏了什么?
发布于 2013-03-18 05:49:50
问题是,我的数据源“模型”是一个列表,但它应该是带有AllowNew==True和AllowEdit==True属性的BindingList。
在DevExpress支持询问数据源是否是只读的之后,我发现了这篇文章,它终于让我大开眼界:
A Problem in DataGridView : datagridview seems readonly to user (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";https://stackoverflow.com/questions/15440436
复制相似问题