XtraGrd.GetRow(XtraGrd.FocusedRowHandle)没有获得焦点TextBox的值

时间:2016-11-02 06:30:08

标签: c# winforms devexpress xtragrid

在我的WinForm应用中,当我想在xtragrid中添加一行时,我在获取焦点 textbox的当前值时遇到问题。

假设我textBox绑定到Model.VchType.Title,在点击保存按钮之前,我的焦点位于txtTitle,我输入了" title1&# 34;在它上面。

这是我的保存按钮事件代码:

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

我在null获得row.Title后,遇到此代码行中的断点。 只有在我点击保存按钮焦点txtTitle之前,才会出现此问题。

-------- UPDATE ------------

以下是一些模型代码:

[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的价值。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您可以在保存数据之前聚焦其他表单对象。所以请致电:

anyControl.Select();

在你保存之前。这将关闭文本框中的打开编辑器并将更改发布到您的DataSource。通常这应该由PostEditor();完成,有时似乎缺乏。