数据绑定与值的读写
如果一个控件已经绑定到了某列,就不应该直接设置该控件的值,而是直接设置其绑定列的值。
假定有一个日期输入框(DateTimePicker),绑定到了订单表的日期列,我们将某个按钮的代码设置为:
Dim
dtp As WinForm.DateTimePicker = e.Form.Controls("DateTimePicker1")
dtp.Value = Date.Today
MessageBox.Show("输入框的值:" & dtp.Value)
MessageBox.Show("日期列的值:" & Tables("订单").Current("日期"))
单击这个按钮,你会发现日期输入框的值,确实等于今天的日期,但是订单表日期列的值,并不是今天,而是原来的值。
也就是说,在绑定状态下,设置控件的值,并不会同步更新其绑定列的值。
在绑定状态下,我们应该直接设置列的值,而不是控件的值。
例如我们将按钮的代码改为:
Tables(
"订单").Current("日期") = Date.Today()
MessageBox.Show("输入框的值:" & e.Form.Controls("DateTimePicker1").Value)
MessageBox.Show("日期列的值:" & Tables("订单").Current("日期"))
现在单击这个按钮,可以发现日期输入框的值和订单表的日期列,都等于今天的日期。
实际上,在绑定状态下,不管是写值还是取值,都应该通过列进行,而不是通过控件进行。
例如假定窗口有个TextBox控件,绑定到表A的第一列,在窗口的AfterLoad设置如下代码:
Dim txt1 As WinForm.TextBox = e.Form.Controls("TextBox1")
MessageBox.Show(txt1.Value)
然后打开窗口,可以发现显示的是一个空值,而不是第一列真正的值,因为窗口刚刚打开的时候,控件还没有来得及从表中取值。
在绑定状态下取值,一样应该直接读取列的值,而不是读取控件的值,所以正确的代码是:
Dim txt1 As WinForm.TextBox = e.Form.Controls("TextBox1")
MessageBox.Show(Tables("表A").Current("第一列"))
?????为什么会出现这种怪事?
[此贴子已经被作者于2014-1-12 14:42:08编辑过]