.NET DataTables, События и определение, изменилось ли конкретное значение столбца - PullRequest
0 голосов
/ 17 января 2012

У меня есть таблица, которая называется Table1, с 3 столбцами:

1) id - целое число и первичный ключ

2) Имя - Строка

3) Помечено - логическое

В большинстве случаев любые строки таблицы Table1 будут иметь флажок со значением 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 Ответ

1 голос
/ 17 января 2012

Это невозможно, поскольку событие ColumnChanged (а также событие RowChanged) работает со всей строкой. Вы можете решить, какой столбец изменен на Notification_ColumnChanged, но он будет срабатывать для любых столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...