XtraGrd.GetRow(XtraGrd.FocusedRowHandle) 没有获得焦点文本框的值

XtraGrd.GetRow(XtraGrd.FocusedRowHandle) doesn't get the value of the focused TextBox

在我的 WinForm 应用程序中,当我想在 xtragrid 中添加一行时,我无法获取 focused 的当前值 textbox.

假设我有一个 textBox 绑定到 Model.VchType.Title ,在我点击保存按钮之前我的 focustxtTitle 上并且我输入了 "title1"就可以了。

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

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

我在 row.Title 遇到这行代码中的断点后得到 null。 而且这个问题只发生在我点击保存按钮 focus 处于 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;
        }
    }
}

我还通过 designer 创建了专栏。

我填了一个bindingSource grid datasource 的属性 在designer中设置为这个bindingsource。

而且我不认为问题出在列名上,因为如果在我单击保存按钮之前我专注于另一个控制器,它工作正常并且我得到 row.Title.

的值

您需要致电

((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;

您可以在保存数据之前聚焦另一个表单对象。所以调用:

anyControl.Select();

保存之前。这将关闭从您的文本框打开的编辑器和 post 对您的数据源所做的更改。通常这应该由 PostEditor(); 完成,有时似乎缺少。