带有变量的数据列表达式

时间:2019-07-01 18:54:37

标签: vb.net variables datatable expression

我有以下代码,它无法正常工作,并且计算成本为零。这是怎么回事?

.Columns.Add("Total", Type.GetType("System.Int32"))
.Columns("Total").Expression = "200 * " & FxRate.ToString

FxRate是一个公共变量。

2 个答案:

答案 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,以下代码将获取CurrencyManagerMe是指包含的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