【问题标题】:DataSet Expression Column Re-Evaluation数据集表达式列重新评估
【发布时间】:2011-06-09 18:56:30
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 如果您尝试使用调试器检查列的值,它将是正确的。它只是不会触发类似 ColumnChanged 的​​事件。我不知道如何强制 DataTable 为计算的只读列发送此类事件。但是,如果您使数据绑定控件无效,它将读取正确的值。
  • 是的,我发现AcceptChanges() 调用后跟BeginEdit() EndEdit() 将导致列具有正确的值。我只是觉得奇怪的是,在评估列时没有任何事件或任何东西可以让您知道。感谢您的帮助。

标签: c# .net strongly-typed-dataset


【解决方案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

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 2017-02-09
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多