0
我有一个强类型的数据集,其中包含由其表达式属性计算的readonly
列。计算的列是totalAmountDue
,表达式是(totalAmountBilledColumn - totalAmountPaidColumn)
。问题是,当两个计算列中的任何一列发生更改时,我无法重新计算计算列。数据集表达式列重新评估
有谁知道如何强制数据集重新评估列的表达式?
谢谢。
我有一个强类型的数据集,其中包含由其表达式属性计算的readonly
列。计算的列是totalAmountDue
,表达式是(totalAmountBilledColumn - totalAmountPaidColumn)
。问题是,当两个计算列中的任何一列发生更改时,我无法重新计算计算列。数据集表达式列重新评估
有谁知道如何强制数据集重新评估列的表达式?
谢谢。
刚刚碰到过这个。关于表达式的有趣之处在于,直到行被添加到表格中后才会进行评估。一旦一行被添加到表中,它将起作用。这是一个例子。
DataTable table = new DataTable();
table.Columns.Add("debit", typeof (double)).DefaultValue = 0;
table.Columns.Add("credit", typeof(double)).DefaultValue = 0;
table.Columns.Add("net", typeof(double),"debit - credit");
DataRow row = table.NewRow();
Console.WriteLine("First: {0}",row["net"]); // won't work
row["debit"] = 500;
Console.WriteLine("Sec: {0}", row["net"]); // won't work
row["credit"] = 0;
Console.WriteLine("Thr: {0}", row["net"]); // won't work
table.Rows.Add(row);
Console.WriteLine(row["net"]); // works
如果您尝试使用调试器检查列的值,它将是正确的。它只是不会触发类似ColumnChanged的事件。我不知道如何强制DataTable发送这样一个计算只读列的事件。但是,如果您使数据绑定控件无效,它将读取正确的值。 – Dmitry 2011-06-09 19:54:11
是的,我发现一个AcceptChanges()调用后面跟着一个BeginEdit()EndEdit()会导致该列具有正确的值。我感到奇怪的是,没有任何事件或任何事情可以让你知道列正在被评估。谢谢你的帮助。 – user501211 2011-06-10 12:20:10