我有以下代码,它无法正常工作,并且计算成本为零。这是怎么回事?
.Columns.Add("Total", Type.GetType("System.Int32"))
.Columns("Total").Expression = "200 * " & FxRate.ToString
FxRate是一个公共变量。
答案 0 :(得分:1)
当FxRate更改时,“总计”字段应自动更新。
DataColumn.Expression
没有提供引用外部变量的方法。但是,您可以随时更新表达式。
FxRate
更改时,您将需要调用update方法。如果FxRate
是属性,则可以从其setter方法调用update方法。
对表达式的更改不会自动反映在绑定控件上。 update方法还需要告知绑定更新。如果通过BindingSource
实例进行绑定,请调用其ResetBindings(False)
方法。如果您直接绑定到DataTable, a more complex method would be to obtain the
DataTable 's
CurrencyManager and call its
Refresh`方法。
假设DataTable
变量名为dt
,以下代码将获取CurrencyManager
; Me
是指包含的Form
。
Dim mngr As CurrencyManager = CType(Me.BindingContext.Item(dt), CurrencyManager)
mngr.Refresh()
编辑:根据注释的要求使用BindingSource的工作示例。
在一个新的WinForm项目中,用以下代码替换Form1.vb的内容(所有控件均由该代码创建-不支持设计器)。
代码创建:TextBox
用于更改“数量”字段”,Label
用于显示“总计”字段,NumericUpDown
用于更改{ {1}}属性,以及两个按钮,用于浏览FxRate
中的记录。
DataTable
具有三个记录。一条记录包含两个字段“数量”和“总计”。每次DataTable
更改时,通过设置“ Quantity”列的Expression
属性,“ Total”将作为表单的FxRate属性和“ Quantity”字段的乘积计算。
FxRate
答案 1 :(得分:0)
添加列FxRate。将“总计”列的表达式更改为"200 * FxRate"
,将根据设置为FxRate
的值自动设置“总计”列的值。
.Columns.Add("FxRate", Type.GetType("System.Int32"))
.Columns.Add("Total", Type.GetType("System.Int32"))
.Columns("Total").Expression = "200 * FxRate"
' Example of setting FxRate in row 0.
' (Assuming row 0 exists.)
.Rows(0).Item("FxRate") = 3