2011-06-09 33 views
0

我有一个强类型的数据集,其中包含由其表达式属性计算的readonly列。计算的列是totalAmountDue,表达式是(totalAmountBilledColumn - totalAmountPaidColumn)。问题是,当两个计算列中的任何一列发生更改时,我无法重新计算计算列。数据集表达式列重新评估

有谁知道如何强制数据集重新评估列的表达式?

谢谢。

+1

如果您尝试使用调试器检查列的值,它将是正确的。它只是不会触发类似ColumnChanged的事件。我不知道如何强制DataTable发送这样一个计算只读列的事件。但是,如果您使数据绑定控件无效,它将读取正确的值。 – Dmitry 2011-06-09 19:54:11

+0

是的,我发现一个AcceptChanges()调用后面跟着一个BeginEdit()EndEdit()会导致该列具有正确的值。我感到奇怪的是,没有任何事件或任何事情可以让你知道列正在被评估。谢谢你的帮助。 – user501211 2011-06-10 12:20:10

回答

1

刚刚碰到过这个。关于表达式的有趣之处在于,直到行被添加到表格中后才会进行评估。一旦一行被添加到表中,它将起作用。这是一个例子。

 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