DataTable là 1 kiểu dữ liệu rất xưa, 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 làm cho việc lập trình trỡ nên rối rắm với những lập trình viên mới vào nghề cũng như mới bắt đầu nghiên cứu về c#.
Để 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
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);
// sử dụng Compute
int tong = Convert.ToInt16( dt.Compute("SUM(Tong)","") );
int tong_XepLoai_Kha = Convert.ToInt16( dt.Compute("SUM(Tong)", "XepLoai='Kha'") );
// lọc các bảng ghi có xếp loại khác kiểu trả về là DataRow
DataRow[] drArrXepLoai_Kha = dt.Select("XepLoai='Kha'");
// lọc các bảng ghi có xếp loại khá, vàtheo cột DiemTB giảm dần sắp xếp kiểu trả về là DataTable
DataView dv = dt.DefaultView;
dv.RowFilter = "XepLoai='Kha'";
dv.Sort = "DiemTB DESC";
DataTable dt_HS_Kha = dv.ToTable();
dv.RowFilter = "";
DataTable dtLop= dv.ToTable(true, "Lop");
DataTable dt= new DataTable();
dt.Column.Add("TT",typeof(string));
dt.Column.Add("Ten",typeof(string));
dt.Column.Add("Lop",typeof(string));
dt.Row.Add("1","Tran Van A","Lop 1B");
dt.Row.Add("2","Tran Van B","Lop 1C");
dt.Row.Add("3","Tran Van H","Lop 1C");
// Select luôn trả về 1 array kiểu DataRow
DataRow[] dr_all =dt.Select();
DataRow dr_0 =dt.Select("TT='1'")[0];
DataRow[] dr_Lop1C =dt.Select("Lop='Lop 1C'");
foreach(DataRow dr_i in dr_Lop1C)
{
}
Trong C# hay sử dụng Distinct DataTable C# như trong SQL Server để nhóm dữ liệu
DataTable dtLop= dv.ToTable(true, "Lop");