【问题标题】:.NET DataTables, Events and determining if a specific column value has changed.NET 数据表、事件并确定特定列值是否已更改
【发布时间】:2012-01-17 05:44:20
【问题描述】:

我有一个名为 Table1 的表格,有 3 列:

1) id - 一个整数和主键

2) 名称 - 一个字符串

3) 标记 - 布尔值

在大多数情况下,Table1 的任何行都将标记为 false。我很想知道 any 行的值何时设置为 true。目前,我只是在使用查询

Table1.Select("标记 = TRUE")

但是,我认为可以使用事件来确定这一点。

下面带有 DataColumnChangeEventHandler 的代码会给我任何列更改的通知。 Notification_ColumnChanged() 方法被调用了 3 次,因为 UpdateTable() 方法中有三行。

我宁愿只在标记列中的任何行被修改时才收到一次通知,因此我不需要调用 Select() 方法。我想知道这是否可能?也许基于这些的数据视图和事件将是实现这一目标的更好方法?我对任何建议都很感兴趣。

谢谢。

using System;
using System.Data;

namespace ConsoleApplication1
{
    public class Program
    {
        private TestDataSet _testDataSet;

        public Program()
        {
            _testDataSet = new TestDataSet();
            _testDataSet.Table1.AddTable1Row(1, "name1", false);
            _testDataSet.Table1.AddTable1Row(2, "name2", false);
            _testDataSet.Table1.AcceptChanges();
            _testDataSet.Table1.ColumnChanged += new DataColumnChangeEventHandler(Notification_ColumnChanged);
        }

        private void Notification_ColumnChanged(object sender, DataColumnChangeEventArgs e)
        {
            Console.WriteLine("Notification_ColumnChanged");
        }

        public void UpdateTable()
        {
            Console.WriteLine("Updating");
            _testDataSet.Table1[0].Flagged = true;
            _testDataSet.Table1[1].Flagged = true;
            _testDataSet.Table1[1].Name = "name2";
        }

        public static void Main(string[] args)
        {
            Program p = new Program();
            p.UpdateTable();
        }
    }
}

【问题讨论】:

    标签: .net events datatable


    【解决方案1】:

    这是不可能的,因为 ColumnChanged 事件(以及 RowChanged 事件)适用于整行。您可以解决测试将哪个列更改为 Notification_ColumnChanged 的​​问题,但它会为任何列触发。

    【讨论】:

    • 这就是我的想法,但我想检查一下。谢谢。
    猜你喜欢
    • 2013-12-30
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 2014-10-03
    相关资源
    最近更新 更多