用户在一人员编辑界面中录入一身份证号,将此身份证号拆分成性别及出生日期后,如何将其在界面中立即刷新?(身份证号与性别、出生日期均

success_victory 2002-12-23 07:10:46
用户在一人员编辑界面中录入一身份证号,将此身份证号拆分成性别及出生日期后,如何将其在界面中立即刷新?(身份证号与性别、出生日期均在一个DataTable中,不能用AcceptChanges,因为我还没有更新到数据库)
...全文
152 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
success_victory 2002-12-23
  • 打赏
  • 举报
回复
还没吃饭。分我明天给你,多谢多谢
success_victory 2002-12-23
  • 打赏
  • 举报
回复
谢谢了!
你的QQ号?在哪儿?
HanYZ 2002-12-23
  • 打赏
  • 举报
回复
首先、如果你用我上面的测试代码可以看到textBox3的内容改变的话,说明EndEdit方法是可以得到你所要的效果的(我通常先用简单的例子尝试成功,再考虑复杂的),然后再去找出你代码中可能的其他原因
success_victory 2002-12-23
  • 打赏
  • 举报
回复
1. 主要是考虑到界面代码与实现代码分离
2. 别的也就是一些oo的原因了
HanYZ 2002-12-23
  • 打赏
  • 举报
回复
应该是你多层传递的问题,不过
多层,如果没有经过WebService的话,可以直接将DataAccess构造的DataTable作为参数传递到WinForm层,你为什么要用新的类去转换呢?
success_victory 2002-12-23
  • 打赏
  • 举报
回复
另外,在我AcceptChanged之后,确显示正常结果,why?
success_victory 2002-12-23
  • 打赏
  • 举报
回复
我做的是三层开发:
主要情况如下:
winform层: 一DataSet ,其中含一PersonTable表
businessFacade层: 含一Mediator,其主要作用是将界面上的PersonTable
转移到person类中。
businessRules层: 含一PersonTable表,其对界面上PersonTable进行引用。
比较你的实例,其差别会不会是不同的类中,消息传递不到窗体上?
success_victory 2002-12-23
  • 打赏
  • 举报
回复
HanYZ(飞虎)老兄:
按道理,你的方法是可以的,但是在我这儿却不行。
HanYZ 2002-12-23
  • 打赏
  • 举报
回复
EndEdit();
BeginEdit();
这两个方法都用在DataRow上,如上例

success_victory 2002-12-23
  • 打赏
  • 举报
回复
我试试
success_victory 2002-12-23
  • 打赏
  • 举报
回复
谢谢你:
HanYZ 2002-12-23
  • 打赏
  • 举报
回复
改变TextBox1的值,回车
HanYZ 2002-12-23
  • 打赏
  • 举报
回复
新建一个Form 放上三个TextBox试一下看看,或许可以帮到你

private System.Data.DataTable dt;

private void Form1_Load(object sender, System.EventArgs e)
{
this.dt = new DataTable();
dt.Columns.Add("X",typeof(System.String));
dt.Columns.Add("Y",typeof(System.String));

DataRow dr = dt.Rows.Add(new object[]{"1","2"});
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.dt, "X"));
this.textBox3.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.dt, "Y"));
this.dt.ColumnChanged += new DataColumnChangeEventHandler(RowChange);
}

private void RowChange(object sender, DataColumnChangeEventArgs e)
{
if (e.Column.ColumnName == "X")
{
e.Row["Y"] = e.Row["X"];
e.Row.EndEdit();
}
}

private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if (e.KeyChar == (char)13)
{
textBox2.Focus();
}
}
success_victory 2002-12-23
  • 打赏
  • 举报
回复
to HanYZ(飞虎):
谢谢谢谢:
我刚才试过。 但我form上的增加操作是通过CurrencyManager对象来实现的,它没有beginEdit()
再请指教!

success_victory 2002-12-23
  • 打赏
  • 举报
回复
yarshray(saga jion):
多谢,多谢。
现在的关键问题实际上就是我能不能通过TB的列来只知道相应绑定的
控件名。
注: 我用的是一系列的控件来绑定DataTable的。
HanYZ 2002-12-23
  • 打赏
  • 举报
回复
EndEdit()调用后你可以立即调用BeginEdit();继续编辑
同时控制不要进行数据验证
yarshray 2002-12-23
  • 打赏
  • 举报
回复
要实现立即刷新必须要有个东西来通知程序,让程序知道

所以必须要有个事件来通知程序你可以试试自定义事件

然后把重写datagrid的WndProc来检查
success_victory 2002-12-23
  • 打赏
  • 举报
回复
HanYZ(飞虎):
多谢多谢。
此时用户的编辑还没完毕,可能还有一些非空的字段。
另外我的界面代码与验证代码是分开的。
success_victory 2002-12-23
  • 打赏
  • 举报
回复
HanYZ(飞虎) :
多谢多谢。是一系列绑定控件。
问题:
我先说说我的情况:
1.winform程序。
2.form中有一DataSet,form中的控件与DataSet 中的personTable绑定
3.person类中也有一个DataTable TB,其实现与Form中PersonTable的引用
4.先在Person类的TB的列改变事件,录入身份证号,并解析身份证号,
分别赋与另两个列:sexNo,birthday
5.窗体上绑定sexNo,与BirthDay的控件如何立即刷新?

急切盼复!

HanYZ 2002-12-23
  • 打赏
  • 举报
回复
不能用AcceptChanges,你可以用EndEdit()
加载更多回复(4)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧