用户在一人员编辑界面中录入一身份证号,将此身份证号拆分成性别及出生日期后,如何将其在界面中立即刷新?(身份证号与性别、出生日期均
用户在一人员编辑界面中录入一身份证号,将此身份证号拆分成性别及出生日期后,如何将其在界面中立即刷新?(身份证号与性别、出生日期均在一个DataTable中,不能用AcceptChanges,因为我还没有更新到数据库) 问题点数:100、回复次数:24Top
1 楼success_victory(success_victory)回复于 2002-12-23 19:16:32 得分 0
唉!!!
如有答案,马上结贴!
(在线等待!!!!!!!!!!!)Top
2 楼success_victory(success_victory)回复于 2002-12-23 19:24:28 得分 0
?Top
3 楼HanYZ(飞虎)回复于 2002-12-23 19:29:46 得分 0
你在Grid中输入呢还是?Top
4 楼success_victory(success_victory)回复于 2002-12-23 19:33:26 得分 0
注:
datatable 与 winform 在两个类中,DataTable 所在的能能得到具体的控吗?Top
5 楼HanYZ(飞虎)回复于 2002-12-23 19:37:09 得分 0
不能用AcceptChanges,你可以用EndEdit()Top
6 楼success_victory(success_victory)回复于 2002-12-23 19:43:00 得分 0
HanYZ(飞虎) :
多谢多谢。是一系列绑定控件。
问题:
我先说说我的情况:
1.winform程序。
2.form中有一DataSet,form中的控件与DataSet 中的personTable绑定
3.person类中也有一个DataTable TB,其实现与Form中PersonTable的引用
4.先在Person类的TB的列改变事件,录入身份证号,并解析身份证号,
分别赋与另两个列:sexNo,birthday
5.窗体上绑定sexNo,与BirthDay的控件如何立即刷新?
急切盼复!
Top
7 楼success_victory(success_victory)回复于 2002-12-23 19:50:47 得分 0
HanYZ(飞虎):
多谢多谢。
此时用户的编辑还没完毕,可能还有一些非空的字段。
另外我的界面代码与验证代码是分开的。Top
8 楼yarshray(saga jion(心飘情落))回复于 2002-12-23 19:55:26 得分 0
要实现立即刷新必须要有个东西来通知程序,让程序知道
所以必须要有个事件来通知程序你可以试试自定义事件
然后把重写datagrid的WndProc来检查Top
9 楼HanYZ(飞虎)回复于 2002-12-23 19:56:31 得分 100
EndEdit()调用后你可以立即调用BeginEdit();继续编辑
同时控制不要进行数据验证Top
10 楼success_victory(success_victory)回复于 2002-12-23 19:58:52 得分 0
yarshray(saga jion):
多谢,多谢。
现在的关键问题实际上就是我能不能通过TB的列来只知道相应绑定的
控件名。
注: 我用的是一系列的控件来绑定DataTable的。
Top
11 楼success_victory(success_victory)回复于 2002-12-23 20:17:55 得分 0
to HanYZ(飞虎):
谢谢谢谢:
我刚才试过。 但我form上的增加操作是通过CurrencyManager对象来实现的,它没有beginEdit()
再请指教!
Top
12 楼HanYZ(飞虎)回复于 2002-12-23 20:22:31 得分 0
新建一个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();
}
}
Top
13 楼HanYZ(飞虎)回复于 2002-12-23 20:23:47 得分 0
改变TextBox1的值,回车Top
14 楼success_victory(success_victory)回复于 2002-12-23 20:23:56 得分 0
谢谢你:
Top
15 楼success_victory(success_victory)回复于 2002-12-23 20:24:53 得分 0
我试试
Top
16 楼HanYZ(飞虎)回复于 2002-12-23 20:27:02 得分 0
EndEdit();
BeginEdit();
这两个方法都用在DataRow上,如上例
Top
17 楼success_victory(success_victory)回复于 2002-12-23 20:44:05 得分 0
HanYZ(飞虎)老兄:
按道理,你的方法是可以的,但是在我这儿却不行。
Top
18 楼success_victory(success_victory)回复于 2002-12-23 20:49:15 得分 0
我做的是三层开发:
主要情况如下:
winform层: 一DataSet ,其中含一PersonTable表
businessFacade层: 含一Mediator,其主要作用是将界面上的PersonTable
转移到person类中。
businessRules层: 含一PersonTable表,其对界面上PersonTable进行引用。
比较你的实例,其差别会不会是不同的类中,消息传递不到窗体上?Top
19 楼success_victory(success_victory)回复于 2002-12-23 20:53:15 得分 0
另外,在我AcceptChanged之后,确显示正常结果,why?Top
20 楼HanYZ(飞虎)回复于 2002-12-23 20:55:59 得分 0
应该是你多层传递的问题,不过
多层,如果没有经过WebService的话,可以直接将DataAccess构造的DataTable作为参数传递到WinForm层,你为什么要用新的类去转换呢?Top
21 楼success_victory(success_victory)回复于 2002-12-23 21:00:07 得分 0
1. 主要是考虑到界面代码与实现代码分离
2. 别的也就是一些oo的原因了Top
22 楼HanYZ(飞虎)回复于 2002-12-23 21:05:52 得分 0
首先、如果你用我上面的测试代码可以看到textBox3的内容改变的话,说明EndEdit方法是可以得到你所要的效果的(我通常先用简单的例子尝试成功,再考虑复杂的),然后再去找出你代码中可能的其他原因Top
23 楼success_victory(success_victory)回复于 2002-12-23 21:07:24 得分 0
谢谢了!
你的QQ号?在哪儿?
Top
24 楼success_victory(success_victory)回复于 2002-12-23 21:10:42 得分 0
还没吃饭。分我明天给你,多谢多谢Top




