我有一个名为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();
}
}
}
答案 0 :(得分:1)
这是不可能的,因为ColumnChanged事件(以及RowChanged事件)在整行上都有效。您可以解决测试哪些列已更改为Notification_ColumnChanged,但它将触发任何列。