2016-11-02 8 views
1

В моем WinForm приложения, когда я хочу, чтобы добавить строку в xtragrid, у меня есть проблема с получением текущего значения сосредоточенаtextbox ,XtraGrd.GetRow (XtraGrd.FocusedRowHandle) не получает значение сфокусированного TextBox

Предположим, у меня есть textBox связываются с Model.VchType.Title, Прежде чем нажать кнопку Сохранить кнопку мой фокус находится на txtTitle и я напечатал «title1» на нем.

Это мой код кнопку Сохранить событие:

Model.VchType row = xtraGrd.GetRow(xtraGrd.FocusedRowHandle) as Model.VchType; 

я null для row.Title после того, как попадает в точку останова в этой строке кода. И эта проблема возникает только тогда, когда я нажимаю кнопку сохранения Фокус находится на txtTitle.

-------- ОБНОВЛЕНИЕ ------------

Вот некоторые из кода модели:

[System.ComponentModel.DataAnnotations.Schema.Table("vwVchType", Schema = "Sle")] 
[Serializable] 
public class VchType : Entity 
{ 
    private int _ID; 
    [System.ComponentModel.DataAnnotations.Schema.Column] 
    [RnDisplayName(typeof(Rnw.Sle.Properties.Resources), "ID")] 
    public override int ID 
    { 
     get 
     { 
      return _ID; 
     } 
     set 
     { 
      _ID = value; 
     } 
    } 

    private string _Title; 
    [System.ComponentModel.DataAnnotations.Schema.Column] 
    [RnDisplayName(typeof(Rnw.Sle.Properties.Resources), "Title")]   
    public string Title 
    { 
     get 
     { 
      return _Title; 
     } 
     set 
     { 
      _Title = value; 
     } 
    } 
} 

Также я создал столбцы дизайнер.

Я заполняю bindingSource и устанавливаю свойство сетки datasource на этот источник связывания в дизайнере.

И я не думаю, что проблема - это имя столбца, потому что если до нажатия кнопки «Сохранить» я фокусируюсь на другом контроллере, он отлично работает, и я получаю значение для row.Title.

+0

Является ли текстовое поле репозиторием в сетке? Или это текстовое поле из GridComponent? – Sebi

+0

@Sebi Свой репозиторий в сетке –

+0

Перед сохранением данных попытайтесь установить фокус на любом другом объекте. Это не так чисто, но у меня есть проекты, где это было полезно. Итак, первое действие в вашем методе сохранения - установить фокус на любую метку или sth. из сетки. – Sebi

ответ

0

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

anyControl.Select(); 

Прежде чем вы экономите. Это закроет открытый редактор из вашего текстового поля и опубликует изменения в вашем DataSource. Обычно это должно быть сделано PostEditor();, которое иногда кажется недостаточным.

1

Вам нужно позвонить

((GridView)xtraGrid.FocusedView).PostEditor(); 

или gridView.PostEditor() это сохранит текущее значение в редакторе EditValue. Затем вам нужно позвонить view.UpdateCurrentRow(), чтобы проверить сфокусированную строку и сохранить ее значения в источнике данных.

Так что вам нужно что-то вроде этого

((GridView)xtraGrid.FocusedView).PostEditor(); 
((GridView)xtraGrid.FocusedView).UpdateCurrentRow(); 
Model.VchType row = xtraGrd.GetRow(xtraGrd.FocusedRowHandle) as Model.VchType; 
+0

Спасибо за ответ, я использовал gridView.PostEditor(), но проблема не решена. Еще получить null для row.Title –

+0

gridView.FocusedView.PostEditor(); , он говорит, что gridView dosn't содержит определение для FocusedView. Поэтому вместо этого я использовал gridView.PostEditor(). Но не решил peoblem. –

+0

Можете ли вы разместить больше своего кода. Особенно модель. –