public static void RunTest()
{
// 初始化datatable,并指定表名为TableName,TableName可以不指定
DataTable dt = new DataTable("TableName");
dt.TableName = "TableName";// 指定表名为TableName
// 设置datatable的列名,忽略大小写,并且指定该列的数据类型;数据类型设置可忽略
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("FId", typeof(int));
dt.Columns.Add("P1", typeof(string));
dt.Columns.Add("P2", typeof(string));
// 新增一行数据
DataRow dr = dt.NewRow();
dr.ItemArray = new object[] { 1, 0, "P1", "P2" };
dt.Rows.Add(dr);
DataRow dr2 = dt.NewRow();
dr2.ItemArray = new object[] { 2, 0, "P1", "P2" };
dt.Rows.Add(dr2);
// 遍历datatable,显示每一行数据
foreach (DataRow row in dt.Rows)
{
object value;
// 通过遍历列的方式,获取该行的每一列数据
foreach (DataColumn column in dt.Columns)
{
value = row[column];
}
// 通过下标获取该行指定列的数据
value = row[0];
// 通过列名,获取该行指定列的数据
value = row["Id"];
}
// 设置表特定行与列的数据值。
//dt.Rows[i].SetField<int>(dc, int.Parse(hc.Values[i]);
// 复制表
DataTable dt2 = dt.Clone();
// 将 dt2 表合并到表 dt
dt.Merge(dt2);
// 获取datatable某列所有数据
// 注意:Field<T> 如果数据类型和的datatable该列的数据类型不一致时会触发类型转换失败错误,T如果是object可以避免该问题
List<object> datas = dt2.AsEnumerable().Select(x => x.Field<object>("Id")).ToList();
// 获取datatable某几列所有数据
List<Tuple<int,int>> datas2 = dt.AsEnumerable().Select(x => new Tuple<int, int>(x.Field<int>("Id"), x.Field<int>("fid"))).ToList();
// 获取dt的指定列,生成一个新的dt
DataTable dtResult = dt.DefaultView.ToTable(false, new string[] { "Id", "FId" });
// 修改DataTable的列名
dtResult.Columns["FId"].ColumnName = "Parent Id";
}