DevExpress lookupedit 存储库项目在第一行的 Xtra 网格视图中添加新行
DevExpress lookupedit repository item add new row in Xtra Grid View in first row
我有一个包含 5 列的 devexpress gridcontrol。第一列是一个 lookupedit 存储库,其中包含一些数据,比如 CarTypes。
为了在网格中加载数据,我使用了 BindingSource
。在这个 BindingSource.DataSource
我加载了一个 IList<Cars>
然后
在我的网格控件的数据源中添加了这个绑定源
像下面这样
BindingSource _carsBindingSource = new BindingSource();
private void BindData(IList<Cars> data)
{
_carsBindingSource.DataSource = data;
carsGridControl.BeginUpdate();
carsGridControl.DataSource = _carsBindingSource;
carsGridControl.RefreshDataSource();
carsGridControl.EndUpdate();
}
我有一个按钮可以在我的网格中添加新行 "Add new car" 并在 _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);
效果很好
谁能帮帮我?谢谢!
如果您还没有,请考虑使用您的汽车类型的中间列表:
private List<CarTypes> _CarTypes;
// Elsewhere in the code...
_CarTypes = GetCarTypes();
然后在表单加载事件中,确保绑定到数据源:
repositoryLookupItemCarTypes.DataSource = _CarTypes;
有了这个,网格现在应该自动管理每个 Cars 对象的 CarType 对象的实例化和选择。将汽车添加到网格时可以省略此行:
newCar.CarType = new CarType();
在设计器中,我认为它有助于改变存储库项目的 DisplayMember
属性。
使用此设置,添加到您的网格的任何汽车都应自动将 CarType 作为填充的查找编辑。
如果有任何不清楚的地方,请告诉我。我做了一个快速而肮脏的解决方案来测试这个,我显然不能 post 全部,但我可以告诉你它确实适用于 Add
和 Insert
.
其实我找到了解决办法。
问题出在 GridView_CustomRowCellEdit(object sender, 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)
时,因为第二行有值
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)
是一样的!
我为我的英语道歉!!
我有一个包含 5 列的 devexpress gridcontrol。第一列是一个 lookupedit 存储库,其中包含一些数据,比如 CarTypes。
为了在网格中加载数据,我使用了 BindingSource
。在这个 BindingSource.DataSource
我加载了一个 IList<Cars>
然后 在我的网格控件的数据源中添加了这个绑定源 像下面这样
BindingSource _carsBindingSource = new BindingSource();
private void BindData(IList<Cars> data)
{
_carsBindingSource.DataSource = data;
carsGridControl.BeginUpdate();
carsGridControl.DataSource = _carsBindingSource;
carsGridControl.RefreshDataSource();
carsGridControl.EndUpdate();
}
我有一个按钮可以在我的网格中添加新行 "Add new car" 并在 _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);
效果很好
谁能帮帮我?谢谢!
如果您还没有,请考虑使用您的汽车类型的中间列表:
private List<CarTypes> _CarTypes;
// Elsewhere in the code...
_CarTypes = GetCarTypes();
然后在表单加载事件中,确保绑定到数据源:
repositoryLookupItemCarTypes.DataSource = _CarTypes;
有了这个,网格现在应该自动管理每个 Cars 对象的 CarType 对象的实例化和选择。将汽车添加到网格时可以省略此行:
newCar.CarType = new CarType();
在设计器中,我认为它有助于改变存储库项目的 DisplayMember
属性。
使用此设置,添加到您的网格的任何汽车都应自动将 CarType 作为填充的查找编辑。
如果有任何不清楚的地方,请告诉我。我做了一个快速而肮脏的解决方案来测试这个,我显然不能 post 全部,但我可以告诉你它确实适用于 Add
和 Insert
.
其实我找到了解决办法。 问题出在 GridView_CustomRowCellEdit(object sender, 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)
时,因为第二行有值
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)
是一样的!
我为我的英语道歉!!