.NET DataTables,事件以及确定特定列值是否已更改

时间:2012-01-17 05:44:21

标签: .net events datatable

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

1)id - 一个整数和主键

2)名称 - 字符串

3)已标记 - 布尔值

在大多数情况下,Table1的任何行都将Flagged设置为false。我很想知道任何行何时将值设置为true。现在,我一直在使用查询

Table1.Select(“Flagged = TRUE”)

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

下面的代码和DataColumnChangeEventHandler将为我提供任何列更改的通知。 Notification_ColumnChanged()方法被调用三次,因为方法UpdateTable()中有三行。

我更愿意只获得一次通知,并且只有在标记列中的任何行被修改时才会被通知,因此我不需要调用Select()方法。我想知道这是否可能?也许基于这些的DataViews和事件是实现这一目标的更好方法?我对任何建议感兴趣。

感谢。

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();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这是不可能的,因为ColumnChanged事件(以及RowChanged事件)在整行上都有效。您可以解决测试哪些列已更改为Notification_ColumnChanged,但它将触发任何列。