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 全部,但我可以告诉你它确实适用于 AddInsert.

其实我找到了解决办法。 问题出在 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)是一样的!

我为我的英语道歉!!