0

У меня есть элемент управления devexpress с 5 столбцами. Первый столбец представляет собой репозиторий lookupedit с некоторыми данными, скажем, с CarTypes. Чтобы загрузить данные в сетку, я использую BindingSource. В этом BindingSource.DataSource у меня есть загружаю IList<Cars>Элемент репозитория DevExpress lookupedit добавить новую строку в Xtra Grid View в первой строке

, а затем добавил этот источник привязки в DataSource моего GridControl как сильфон

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

что это за линия слова означает ??? Теперь вы хорошо написали свой вопрос, но до сих пор неясно, что вы просите. –

+0

У вас есть право @NiranjanKala. Actualy Я хочу добавить новую строку в мои машиныBindingSource, но в первой строке сетки. Я использую carsBindingSource.Insert (0, newCar), но не работает правильно –

+0

Actualy Я нашел решение. Проблема была в событии GridView_CustomRowCellEdit (object sender, CustomRowCellEditEventArgs e), где я изменяю значение AllowEdit (e.Column.OptionsColumn.AllowEdit = правда;). .Add (объект), .Insert (0, объект) - это то же самое! –

ответ

1

Актуально Я нашел решение. Проблема была в событии 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) такое же!

Прошу прощения за мой английский!

1

Если вы еще не сделали, рассмотреть возможность использования промежуточного списка для типов автомобилей:

private List<CarTypes> _CarTypes; 

// Elsewhere in the code... 
_CarTypes = GetCarTypes(); 

, а затем в случае загрузки формы, убедитесь, что это связано с источником данных:

repositoryLookupItemCarTypes.DataSource = _CarTypes; 

При этом сетка теперь должна автоматически управлять созданием и выбором объекта CarType для каждого объекта Cars. Вы можете пропустить эту строку, когда вы добавляете автомобиль к сетке:

newCar.CarType = new CarType(); 

В конструкторе, я думаю, что это помогает изменить DisplayMember Достояние хранилища Пункт.

С помощью этой настройки любой автомобиль, добавленный в вашу сетку, должен автоматически иметь CarType в качестве заполненного Редактора поиска.

Если это неясно, сообщите мне. Я сделал быстрое и грязное решение, чтобы проверить это, и я, очевидно, не могу опубликовать его полностью, но могу сказать, что он работал с обоими Add и Insert.

+0

Благодарим вас за ответ. Но у меня уже все это. С BindingSource.Add (newCar) отлично работает, но проблема в том, что новая строка идет в конце строки сетки, и я хочу добавить в первую строку. С Insert (0, newCar) он переходит в первую строку, но я должен многократно щелкнуть в других столбцах до перезагрузки данных в репозитории lookupedit, я попробую bindSource.AddNew() с помощью Insert и теперь добавил 2 строки. Один в первом ряду и ряд в конце сетки, но теперь работает! Я не могу понять, что происходит –

+0

Ну, я рад, что это работает, по крайней мере. Для чего это стоит, вы можете добавить источник привязки во время разработки (в форме), а не в код. Возможно, вы это сделали и только показали код, чтобы проиллюстрировать его, но на всякий случай ... – Hambone

 Смежные вопросы

  • Нет связанных вопросов^_^