C# DataTable类
定义
DataTable是C#中的一个类,表示内存中数据的一个表,命名空间为:System.Data
public class DataTable : System.ComponentModel.MarshalByValueComponent, System.ComponentModel.IListSource, System.ComponentModel.ISupportInitialize, System.ComponentModel.ISupportInitializeNotification, System.Runtime.Serialization.ISerializable, System.Xml.Serialization.IXmlSerializabl
创建DataTable
DataTable dt = new DataTable();
添加DataColumn
//第一种方式
dt.Columns.Add("姓名", typeof(string));
dt.Columns.Add("年龄", typeof(int));
//第二种方式
DataColumn dataColumn = new DataColumn();
dataColumn.ColumnName = "籍贯";
dataColumn.DataType = typeof(string);
dt.Columns.Add(dataColumn);
添加DataRow
//添加DataRow
//第一种方式
DataRow dr1 = dt.NewRow();
dr1[0] = "小王";
dr1[1] = 23;
dr1[2] = "湖北武汉";
dt.Rows.Add(dr1);
//第二种方式
DataRow dr2 = dt.NewRow();
dr2["姓名"] = "小李";
dr2["年龄"] = 21;
dr2["籍贯"] = "福建福州";
dt.Rows.Add(dr2);
//选定一种方式之后,可以使用循环添加行
for(int i =0; i<100;i++)
{
DataRow dr = dt.NewRow();
dr["姓名"] = $"小李+{i}号";
dr["年龄"] = i;
dr["籍贯"] = "福建福州";
dt.Rows.Add(dr);
}
现在查看DataTable,如下图所示:
读取DataTable中的数据
获取DataColumn的值
string columnName = (string)dt.Columns[0].ToString();
Debug.WriteLine($"{columnName}");
dt.Columns[0]中的0表示第一列,dt.Columns[1]就表示第二列
运行结果,如下图所示:
获取DataRow的值
//dt.Rows[0][0]表示第一行的第一列的值
//dt.Rows[0]["年龄"]表示第一行中列名为年龄的值
//同理,dt.Rows[1][1]表示第二行第二列的值
//Rows[1]["姓名"]表示第二行列名为姓名的值
string name1 = (string)dt.Rows[0][0];
int age1 = (int)dt.Rows[0]["年龄"];
string name2 = (string)dt.Rows[1]["姓名"];
int age2 = (int)dt.Rows[1][1];
Debug.WriteLine($"姓名:{name1},年龄:{age1}\r\n" +
$"姓名:{name2},年龄:{age2}\r\n ");
运行结果,如下图所示:
更新DataTable中的数据
//更新DataTable第一行的数据
dt.Rows[0][0] = "小红";
dt.Rows[0]["年龄"] = 25;
dt.Rows[0][2] = "福建泉州";
查看dt,发现第一行数据已经更改,如下图所示:
删除DataTable中的数据
//使用Delete
dt.Rows[0].Delete();
Debug.WriteLine(dt.Rows[0][0].ToString());
//使用RemoveAt
dt.Rows.RemoveAt(0);
Debug.WriteLine(dt.Rows[0][0].ToString());
//使用Remove
DataRow dataRow = dt.Rows[0];
dt.Rows.Remove(dataRow);
Debug.WriteLine(dt.Rows[0][0].ToString());
运行之后的结果,如下图所示:
remove与delete的区别
remove是直接删除,delete实际上是先标记为删除,执行AcceptChanges()之后才真的删除,执行RejectChanges()方法可以撤销删除
dt.AcceptChanges();
DataRowCollection itemColumns = dt.Rows;
Debug.WriteLine($"Delete前的RowState:{itemColumns[3].RowState.ToString()}");
itemColumns[0].Delete();
itemColumns[3].Delete();
itemColumns[5].Delete();
itemColumns[7].Delete();
Debug.WriteLine($"Delete后的RowState:{itemColumns[3].RowState.ToString()}");
运行到这里时输出的结果,如下图所示:
查看dt,结果如下图所示:
执行RejectChanges()方法撤销删除
itemColumns[3].RejectChanges();
现在再查看dt,结果如下图所示:
接受更改
dt.AcceptChanges();
现在再看dt,结果所下图所示:
清空DataTable数据
dt.Clear();