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
,在我点击保存按钮之前我的 focus 在 txtTitle
上并且我输入了 "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();
完成,有时似乎缺少。
在我的 WinForm
应用程序中,当我想在 xtragrid
中添加一行时,我无法获取 focused 的当前值 textbox
.
假设我有一个 textBox
绑定到 Model.VchType.Title
,在我点击保存按钮之前我的 focus 在 txtTitle
上并且我输入了 "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();
完成,有时似乎缺少。