DevExpress lookupedit存储库项在第一行的Xtra网格视图中添加新行

时间:2015-12-03 09:02:09

标签: c# devexpress bindingsource gridcontrol devexpress-windows-ui

我有一个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);可以正常使用

任何人都可以帮助我吗?谢谢!

2 个答案:

答案 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。

如果其中任何一项不清楚,请告诉我。我做了一个快速而肮脏的解决方案来测试这个,我显然无法发布所有内容,但我可以告诉你,它确实适用于AddInsert

答案 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)是一样的!

我为我的英语道歉!