DataTable trong C#

Ví dụ DataTable trong C#, nhiều ví dụ hay về kiểu biến DataTable trong C#

DataTable là 1 kiểu dữ liệu rất lâu đời, kể từ NetFrameword 1.0, nhưng mang hiệu quả trong lập trình rất lớn, chỉ những lập trình viên lâu năm sẽ nhận ra điều này khi xây dựng phần mềm thương mại.

DotNet mới bây giờ ra quá nhiều kiễu dữ liệu nhưng bản chất nó đều mang lại lợi ích như nhau.

Tôi viết bài này để các lập trình viên tham khảo cách sử dụng DataTable cực hay do Microsoft cung cấp.

  1. Cách khai báo biến kiểu DataTable
  2. Cách khai báo cột kiểu DataColumn và có sử dụng Expression vào DatatTable
  3. Cách thêm row vào DataTable
  4. Sử dụng một số hàm tính toán trong đối tượng DataTable
  5. Cách sử dụng DataView
  6. Cách sử dụng Select từ đối tượng DataTable để tìm theo điều kiện

1. Cách khai báo biến kiểu DataTable

Để sử dụng được biến kiểu DataTable cần dùng namespace System.Data ;

Cách khai báo biến

DataTable Ten_BIEN = new DataTable();

* Ten_BIEN đặt tùy biến ko dấu cách, ko ký tự đặc biệt

Biến DataTable để làm gì ?

 - Chứa đựng giá trị từ file text (ít lập trình viên sử dụng), xml (cấu trúc chặc chẽ), Excel, từ CSDL Access, CSDL SQL Server, Oracle...

Ví dụ 1: tạo biến DataTable đơn giản và thêm dữ liệu vào cho biến.

// khai báo biến dt kiểu DataTable
DataTable dt = new DataTable();
// thêm cột vào biến dt
dt.Columns.Add("Ma", typeof(int));
dt.Columns.Add("Ten", typeof(string));
// thêm giá trị vào biến DataTable cách 1
dt.Rows.Add(1, "Tran A");
dt.Rows.Add(2, "Tran B");
// thêm giá trị vào biến DataTable cách 1 (lần 1)
DataRow drAdd_01 = dt.NewRow();
drAdd_01["Ma"] = 3;
drAdd_01["Ten"] = "Le C";
dt.Rows.Add(drAdd_01);
// thêm giá trị vào biến DataTable cách 1 (lần 2)
DataRow drAdd_02 = dt.NewRow();
drAdd_02["Ma"] = 3;
drAdd_02["Ten"] = "Le C";
dt.Rows.Add(drAdd_02);
//cách lấy tổng dòng trong DataTable
int tongsodong = dt.Rows.Count;
//cách lấy giá trị 1 ô trong DataTable
string gt_dong1_cot2 = dt.Rows[0][1].ToString();
string gt_dong1_cot1 = dt.Rows[0]["Ma"].ToString();
//  -> dòng đầu tiên trong DataTable là 0
//     Cột lất có thể là chỉ số hay là tên cột
string ds_Cot_Ma = "";
for (int i = 0; i < tongsodong; i++)
{
    ds_Cot_Ma += dt.Rows[i]["Ma"].ToString() + " ";
}
string ds_Cot_Ten = "";
foreach (DataRow drGet in dt.Rows)
{
    ds_Cot_Ten += drGet["Ten"].ToString() + " ";
}    
Console.WriteLine("Hello, World!");

Thêm cột dt.Columns.Add("Ten");  // không có gán kiểu thì mặc định là kiểu strig

2. Cách khai báo biến kiểu DataTable có sử dụng thêm DataColumn
 

Ví dụ 2: tạo biến DataTable có dùng thêm biến DataColumn

Sử dụng DataColumn để thêm vào DataTable, có sử dụng Expression để tính

  DataTable dt = new DataTable();
 // biến kiểu DataColumn
 DataColumn cl_1 = new DataColumn("STT", typeof(int));           
 DataColumn cl_2 = new DataColumn("HoTen", typeof(string));
 DataColumn cl_3 = new DataColumn("Lop", typeof(string));
 DataColumn cl_4 = new DataColumn("Toan", typeof(int));
 DataColumn cl_5 = new DataColumn("Ly", typeof(int));
 DataColumn cl_6 = new DataColumn("Tong", typeof(int),"Toan+Ly");
 DataColumn cl_7 = new DataColumn("DiemTB", typeof(double), "(Toan+Ly)/2");
 DataColumn cl_8 = new DataColumn("XepLoai", typeof(string), "iif(DiemTB>=8,'Gioi','Kha' ) ");

 //            
 dt.Columns.Add(cl_1);  //dt.Columns.Add("STT",typeof(int));
 dt.Columns.Add(cl_2);
 dt.Columns.Add(cl_3);
 dt.Columns.Add(cl_4);
 dt.Columns.Add(cl_5);
 dt.Columns.Add(cl_6);
 dt.Columns.Add(cl_7);
 dt.Columns.Add(cl_8);
 //
 dt.Rows.Add(1,"A","Lop A",5,7);
 dt.Rows.Add(2, "B", "Lop A", 8, 9);
 dt.Rows.Add(3, "C", "Lop B", 8, 2);
 dt.Rows.Add(4, "D", "Lop B", 8, 9);
 dt.Rows.Add(5, "E", "Lop C", 8, 9);

3. Cách thêm row vào DataTable

Có nhiều cách thêm row vào table nhưng 3 cách dưới đây rất hay sử dụng để thêm row vào datatable

    DataTable dt = new DataTable();
            // biến kiểu DataColumn
            DataColumn cl_1 = new DataColumn("STT", typeof(int));
            DataColumn cl_2 = new DataColumn("HoTen", typeof(string));
            DataColumn cl_3 = new DataColumn("Lop", typeof(string));
            DataColumn cl_4 = new DataColumn("Diem", typeof(Double));
            dt.Columns.Add(cl_1);  //dt.Columns.Add("STT",typeof(int));
            dt.Columns.Add(cl_2);
            dt.Columns.Add(cl_3);
            dt.Columns.Add(cl_4);
            // Cách 1
            dt.Rows.Add(1,"Tran A","FREE",5);
            dt.Rows.Add(2, "Tran B", "FREE",7);
            dt.Rows.Add(2, "Tran C", "FREE", 8);
            // Cách 2
            DataRow dr3 = dt.NewRow();
            dr3["STT"] = 4;
            dr3["HoTen"] = "Bui C";
            dr3["Lop"] = "VIP";
            dr3["Diem"] = 6;
            dt.Rows.Add(dr3);
            DataRow dr4 = dt.NewRow();
            dr4["STT"] = 5;
            dr4["HoTen"] = "Nguyen D";
            dr4["Lop"] = "VIP";
            dr4["Diem"] = 10;
            dt.Rows.Add(dr4);
            // Cách 3 thêm bằng FOR
            for (int i = 6; i <= 10; i++)
            {
                DataRow dr_NEW = dt.NewRow();
                dr_NEW["STT"] = i;
                dr_NEW["HoTen"] = "Nguyen "+ i.ToString();
                dr_NEW["Lop"] = "VIP";
                dr_NEW["Diem"] = i-1;
                dt.Rows.Add(dr_NEW);
            }

 

4. Sử dụng một số hàm tính toán trong đối tượng DataTable

   Sử dụng dữ liệu của bài 3

 // sử dụng Compute int tong = Convert.ToInt16(dt.Compute("SUM(Diem)", ""));
            int tong_XepLoai_LopVIP = Convert.ToInt16(dt.Compute("SUM(Diem)", "Lop='VIP'"));
            int diemThapNhat = Convert.ToInt16(dt.Compute("MIN(Diem)", ""));
            int diemCaoNhat = Convert.ToInt16(dt.Compute("MAX(Diem)", ""));
            double diemTrungBinh = Convert.ToDouble(dt.Compute("AVG(Diem)", ""));

5. Cách sử dụng DataView

Giống như trong Microsoft Access chúng ta tạo ra các view để truy cập đến table

Cú pháp:
DataView dv = dt.DefaultView;

Tạo view để làm gì ?

Sử dụng dữ liệu từ bài trên


  a. Sắp xếp


            //Sắp xếp
            DataView dv_sx_tang = dt.DefaultView;
            dv_sx_tang.Sort = "Diem DESC";

            Console.WriteLine("------------------------");
            Console.WriteLine("Danh sách Học viên có điểm thấp dần");

            foreach (DataRow dr in dv_sx_tang.ToTable().Rows)
            {
                Console.WriteLine("Học viên: " + dr["HoTen"] + ", Diem: " + dr["Diem"]);
            }


 

  b. Tạo bộ lọc


          
            // Lọc dữ liệu theo lớp
            DataView dv_vip = dt.DefaultView;
            dv_vip.RowFilter = "Lop='VIP'";
            Console.WriteLine("------------------------");
            Console.WriteLine("Danh sách Học viên lớp VIP:");
            foreach (DataRow dr in dv_vip.ToTable().Rows)
            {
                Console.WriteLine("Học viên: " + dr["HoTen"] + ", lop: " + dr["Lop"]);
            }
            // Lọc dữ liệu có sử dụng LIKE
            DataView dv_tenHoTran = dt.DefaultView;
            dv_tenHoTran.RowFilter = "HoTen Like 'Tran%'";
            Console.WriteLine("------------------------");
            Console.WriteLine("Danh sách Học viên họ TRAN");
            foreach (DataRow dr in dv_vip.ToTable().Rows)
            {
                Console.WriteLine("Học viên: " + dr["HoTen"] + ", lop: " + dr["Lop"]);
            }
          




   c. Nhóm dữ liệu    

          
            // Nhóm dữ liệu Distinct
            DataView dv_nhomLop = dt.DefaultView;
            dv_nhomLop.RowFilter = "";
            DataTable dt_Lop = dv_nhomLop.ToTable(true, "Lop");
            Console.WriteLine("------------------------");
            Console.WriteLine("Danh sách TÊN LỚP:");
            foreach (DataRow dr in dt_Lop.Rows)
            {
                Console.WriteLine("LỚP: " + dr["Lop"] );
            }
 


 

6. Cách sử dụng Select từ đối tượng DataTable để tìm theo điều kiện

   Cũng giống DataView nhưng phương thức Select trả về 1 mảng DataRow

 DataRow[] getRow = dt.Select("Lop='Vip'","Diem DESC");
           
            Console.WriteLine("------------------------");
            Console.WriteLine("Sử dụng Select ");
            foreach (DataRow dr in getRow)
            {
                Console.WriteLine("Học viên: " + dr["HoTen"] + ", lop: " + dr["Lop"]);
            }

Ví dụ DataTable trong C#, nhiều ví dụ hay về kiểu biến DataTable trong C#