Xử lý các sự kiện của DataTable trong C#

DataTable rất phức tạp . Nó cung cấp nhiều phương thức, thuộc tính và sự kiện. Xử lý sự kiện của DataTable giúp chúng ta phát hiện khi một cái gì đó thay đổi trong một DataTable.

Trong ví dụ này, tôi xin trình bày cách phát hiện và thông báo khi phát sinh sự kiện cập nhật dữ liệu (Thêm, xóa dòng hoặc Update 1 ô dữ liệu) trong 1 DataTable trong C#.

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            DataTable table = new DataTable("PatientTable");

            // ... Cột ID là khóa chính.
            table.Columns.Add("Id", typeof(int));
            table.Columns["Id"].Unique = true;

            table.Columns.Add("Dosage", typeof(int));
            table.Columns.Add("Drug", typeof(string));
            table.Columns.Add("Patient", typeof(string));

            // ... Khởi 5 dòng.
            table.Rows.Add(1, 25, "Evista", "Lundberg");
            table.Rows.Add(2, 50, "Adcirca", "Jeffries");
            table.Rows.Add(3, 10, "Glucagon", "Johnson");
            table.Rows.Add(4, 20, "Amyvid", "Skinner");
            table.Rows.Add(5, 80, "Alimta", "Nguyen");
            table.AcceptChanges();

            // Add a RowChanged event handler.
            table.RowChanged += new DataRowChangeEventHandler(Row_Changed);

            // Add a RowChanging event handler.
            table.RowChanging += new DataRowChangeEventHandler(Row_Changing);

            // Add a RowDeleted event handler.
            table.RowDeleted += new DataRowChangeEventHandler(Row_Deleted);

            // Add a RowDeleting event handler.
            table.RowDeleting += new DataRowChangeEventHandler(Row_Deleting);

            // Add a ColumnChanged event handler.
            table.ColumnChanged += new
                DataColumnChangeEventHandler(Column_Changed);

            // Add a ColumnChanging event handler.
            table.ColumnChanging += new
                DataColumnChangeEventHandler(Column_Changing);

            // Add a TableNewRow event handler.
            table.TableNewRow += new
                DataTableNewRowEventHandler(Table_NewRow);

            // Add a TableCleared event handler.
            table.TableCleared += new
                DataTableClearEventHandler(Table_Cleared);

            // Add a TableClearing event handler.
            table.TableClearing += new
                DataTableClearEventHandler(Table_Clearing);

            // ... Change a row.

            table.Rows[0][1] = 55;
           
            table.Rows[1][1] = 800;
          
            // Thêm dòng
            table.Rows.Add(6, 55, "Duc", "Nguyen");
           
            //Đổi tên cột
            table.Columns["Dosage"].ColumnName = "NewColumnName";
            table.AcceptChanges();

            //Cell Dòng 0, Cột 1 không thay đổi giá trị vì đã bị RejectChanges  
            Console.WriteLine("Dòng 1: "+ table.Rows[0][1].ToString());
          
            // Xóa dòng row.
            table.Rows[0].Delete();
      
            //Xóa hết dữ liệu của bảng
            table.Rows.Clear();

          
            Console.ReadLine();
        }

        private static void Row_Changed(object sender, DataRowChangeEventArgs e)
        {
            if (e.Action == DataRowAction.Change)
            {
                if (e.Row[1].ToString() == "55")
                {
                    e.Row.Table.RejectChanges();
                }
            }
           
            Console.WriteLine("Row_Changed Event: action={0} ; State = {1}",
                 e.Action, e.Row.RowState);
           
        }

        private static void Row_Changing(object sender, DataRowChangeEventArgs e)
        {
            
            Console.WriteLine("Row_Changing Event: action={0} ; State = {1}",
                  e.Action, e.Row.RowState);
        }

        private static void Row_Deleted(object sender, DataRowChangeEventArgs e)
        {
            Console.WriteLine("Row_Deleted Event: action={0} ; State = {1}",
                  e.Action, e.Row.RowState);
        }

        private static void Row_Deleting(object sender,
        DataRowChangeEventArgs e)
        {
            Console.WriteLine("Row_Deleting Event: action={0} ; State = {1}",
                  e.Action, e.Row.RowState);
        }

        private static void Column_Changed(object sender, DataColumnChangeEventArgs e)
        {
            Console.WriteLine("Column_Changed Event: State = {0};  ColumnName={1};"
                , e.Row.RowState, e.Column.ColumnName);
            
        }

        private static void Column_Changing(object sender, DataColumnChangeEventArgs e)
        {
            Console.WriteLine("Column_Changing Event: State = {0};  ColumnName={1};"
             , e.Row.RowState, e.Column.ColumnName);
        }

        private static void Table_NewRow(object sender,
            DataTableNewRowEventArgs e)
        {
            Console.WriteLine("Table_NewRow Event: State = {0}",
                 e.Row.RowState);
        }

        private static void Table_Cleared(object sender, DataTableClearEventArgs e)
        {
            Console.WriteLine("Table_Cleared Event: TableName={0}; Rows={1}",
                e.TableName, e.Table.Rows.Count.ToString());
        }

        private static void Table_Clearing(object sender, DataTableClearEventArgs e)
        {
            Console.WriteLine("Table_Clearing Event: TableName={0}; Rows={1}",
                e.TableName, e.Table.Rows.Count.ToString());
            
        }
    }
}

 

 

Bài viết liên quan

Theo dõi
Thông báo của
guest

0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x