我有一个5列的devexpress gridcontrol。第一列是一个包含一些数据的lookupedit存储库,比如CarTypes。
要在网格中加载数据,我使用的是BindingSource
。在此BindingSource.DataSource
中,我加载了IList<Cars>
然后 在我的gridcontrol的dataSource中添加了这个绑定源 像贝娄一样
BindingSource _carsBindingSource = new BindingSource();
private void BindData(IList<Cars> data)
{
_carsBindingSource.DataSource = data;
carsGridControl.BeginUpdate();
carsGridControl.DataSource = _carsBindingSource;
carsGridControl.RefreshDataSource();
carsGridControl.EndUpdate();
}
我有一个按钮,可以在我的网格“添加新车”中添加新行,并在_ carBindingSource
private void AddNewRow()
{
_newRow = true;
_carsBindingSource.AllowNew = true;
Cars newCar = new Cars();
newCar.CarType = new CarType();
_carsBindingSource.Add(newCar );
//_carsBindingSource.Insert(0,newCar);
}
现在我想在第一行网格中添加新行。
我使用Insert
_carsBindingSource.Insert(0,newCar);
但它没有用。 lookupedit repository
无法加载数据。
_carsBindingSource.Add(newCar);
可以正常使用
任何人都可以帮助我吗?谢谢!
答案 0 :(得分:1)
如果您还没有,请考虑为您的车型使用中间列表:
private List<CarTypes> _CarTypes;
// Elsewhere in the code...
_CarTypes = GetCarTypes();
然后在表单加载事件中,确保它绑定到数据源:
repositoryLookupItemCarTypes.DataSource = _CarTypes;
有了这个,网格现在应该自动管理每个Cars对象的CarType对象的实例化和选择。将汽车添加到网格时,可以省略此行:
newCar.CarType = new CarType();
在设计器中,我认为改变存储库Item的DisplayMember
属性会有所帮助。
通过此设置,添加到网格中的任何Car都应自动将CarType作为填充的Lookup Edit。
如果其中任何一项不清楚,请告诉我。我做了一个快速而肮脏的解决方案来测试这个,我显然无法发布所有内容,但我可以告诉你,它确实适用于Add
和Insert
。
答案 1 :(得分:1)
Actualy我找到了解决方案。 问题出在GridView_CustomRowCellEdit(对象发送者,CustomRowCellEditEventArgs e)事件中 我在哪里更改AllowEdit值(e.Column.OptionsColumn.AllowEdit = true;)。
private void gridView_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{
string cName = e.Column.FieldName;
GridView gv = sender as GridView;
if (cName == "CarType.IdApi")
{
if (isNewRow)
{
Cars cars= (Cars)gv.GetRow(e.RowHandle);
int a = e.RowHandle;
if (cars.ID== 0 && e.RowHandle == 0)
{
e.Column.OptionsColumn.AllowEdit = true;
}
else
{
e.Column.OptionsColumn.AllowEdit = false;
}
}
}
}
当我使用Insert(0, new Car)
时,因为第二行whitch有价值
AllowEdit
是假的;
所以我删除else
代码并且它可以正常工作
private void gridView_CustomRowCellEdit(object sender, CustomRowCellEditEventArgs e)
{
string cName = e.Column.FieldName;
GridView gv = sender as GridView;
if (cName == "CarType.IdApi")
{
if (isNewRow)
{
Cars cars= (Cars)gv.GetRow(e.RowHandle);
int a = e.RowHandle;
if (cars.ID== 0 && e.RowHandle == 0)
{
e.Column.OptionsColumn.AllowEdit = true;
}
}
}
}
所以finlay我发现bindingSource.Add(object)
和bindingSource.Insert(0,object)
是一样的!
我为我的英语道歉!