LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 数据表(DataTable)用法

admin
2025年7月14日 23:20 本文热度 113

ataTable 是一种常见的数据结构,用于以表格形式存储和操作数据。以下是 DataTable 的主要用法介绍:

(1)创建DataTable;

(2)复制表

(3)视图排序

(4)DataTable查询:查询返回DataRow、DataTable、查询某行数据、查询某列数据、查询单元格数据

(5)DataTable行列转换:列转换行,行转换列;

(6)结构List转换为DataTable:结构List通用转换为DataTable方法;

操作如下:
1、创建DataTable:
//创建表实例public DataTable GetTestDataList(int RowNum = 10){    DataTable dt = new DataTable("TableName");    dt.Columns.Add("Id", Type.GetType("System.Int32"));    dt.Columns.Add("Mark", Type.GetType("System.String"));    dt.Columns.Add("IsCheck", Type.GetType("System.Boolean"));    for (int i = 0; i < RowNum; i++)    {        DataRow dr = dt.NewRow();        dr["Id"] = i + 1;        dr["Mark"] = "Value" + i.ToString();        dr["IsCheck"] = i % 2 > 0 ? true : false;        dt.Rows.Add(dr);    }    return dt;}
2、复制表:
//获取一个数据表DataTable NewDt1=GetTestDataList();
//复制表数据及结构DataTable NewDt2 = dt.Copy();
//复制表结构DataTable NewDt3 = dt.Copy();NewDt3.Clear();
//表结构克隆DataTable NewDt4 = dt.Clone();
3、视图排序:
//视图排序DataView dv = dt.DefaultView;//转换为视图dv.Sort = "Id asc";//视图排序(asc   desc )DataTable dataView = dv.ToTable();//视图转换为DataTable
4、DataTable查询:
string strWhere = "Id>=5 and Id<>6";
//(1)查询返回DataRowDataRow[] SelectDr = SelectDataTable(dt, strWhere, "Id asc");  
/// <summary>/// 查询返回DataRow/// </summary>/// <param name="dt">数据表</param>/// <param name="szSelect">查询条件,字段值用单引号,如id>='3' or id='1' 支持 or and like </param>/// <param name="storStr">排序字段,如"字段名 asc/desc(降序)"</param>/// <returns></returns>public DataRow[] SelectDataTable(DataTable dt, string szSelect, string storStr = ""){    DataRow[] DataRows = null;    if (string.IsNullOrEmpty(storStr))        DataRows = dt.Select(szSelect);    else        DataRows = dt.Select(szSelect, storStr);    return DataRows;}

//(2)查询返回DataTableDataTable SelectDt = SelectNewDataTable(dt, strWhere, "Id desc");
/// <summary>/// 查询返回DataTable/// </summary>/// <param name="dt"></param>/// <param name="szSelect">查询条件,字段值用单引号,如id>=1支持 or and like </param>/// <param name="storStr">排序字段,如"字段名 asc/desc(降序)"</param>/// <returns></returns>public DataTable SelectNewDataTable(DataTable dt, string szSelect, string sortstr = ""){    DataTable newdt = new DataTable();    newdt = dt.Clone();    DataRow[] dr = dt.Select(szSelect, sortstr);
    if (dr == null || dr.Length == 0return null;    for (int i = 0; i < dr.Length; i++)    {        newdt.ImportRow((DataRow)dr[i]);    }    return newdt;//返回的查询结果}
//(3)查询某行数据List<string> ListDataA = GetDataTableRowList(dt, 3);
/// <summary>/// 查询某行数据,返回List列表/// </summary>/// <param name="dt"></param>/// <param name="RowIndex">行号,从0开始</param>/// <returns></returns>public List<stringGetDataTableRowList(DataTable dt, int RowIndex){    List<string> RetList = new List<string>();    if (dt == null || dt.Rows.Count == 0return null;    if (RowIndex > dt.Rows.Count) return null;    for (int i = 0; i < dt.Columns.Count; i++)    {        RetList.Add(dt.Rows[RowIndex][i].ToString());    }    return RetList;}
//(4)查询某列数据List<string> ListDataB = GetDataTableColumnList(dt, 5);
/// <summary>/// 查询某列数据,返回List列表/// </summary>/// <param name="dt"></param>/// <param name="ColumnIndex">列号,从0开始</param>/// <returns></returns>public List<stringGetDataTableColumnList(DataTable dt, int ColumnIndex){    List<string> RetList = new List<string>();    if (dt == null || dt.Rows.Count == 0return null;    if (ColumnIndex > dt.Columns.Count) return null;    for (int i = 0; i < dt.Rows.Count; i++)    {        RetList.Add(dt.Rows[i][ColumnIndex].ToString());    }    return RetList;}
//(5)查询单元格数据string RetValue = GetDataTableCellValue(dt, 35);
/// <summary>/// 获取指定行列单元格数据/// </summary>/// <param name="dt"></param>/// <param name="RowIndex">行号</param>/// <param name="ColumnIndex">列号</param>/// <returns></returns>public string GetDataTableCellValue(DataTable dt, int RowIndex, int ColumnIndex){    string RetValue = "";    if (dt == null || dt.Rows.Count == 0return null;    if (RowIndex > dt.Rows.Count) return null;    if (ColumnIndex > dt.Columns.Count) return null;    RetValue = dt.Rows[RowIndex][ColumnIndex].ToString();    return RetValue;}
5、DataTable行列转换:
//(1)行列转换:列转换行DataTable Dt1 = TransRowToCol(dt);
/// <summary>/// DataTable列转换行/// </summary>/// <param name="dt"></param>/// <returns></returns>public DataTable TransRowToCol(DataTable dt){    DataTable RetDt = new DataTable();    if (dt == null || dt.Rows.Count == 0 || dt.Columns.Count == 0return null;    for (int i = 0; i < dt.Rows.Count + 1; i++)    {        DataColumn dc = new DataColumn();        dc.ColumnName = string.Format("C{0}", i);        RetDt.Columns.Add(dc);    }    for (int i = 0; i < dt.Columns.Count; i++)    {        List<string> DataList = GetDataTableColumnList(dt, i);        DataList.Insert(0, dt.Columns[i].ColumnName);        DataRow dr = RetDt.NewRow();        for (int j = 0; j < DataList.Count; j++)        {            dr[j] = DataList[j];        }        RetDt.Rows.Add(dr);    }    return RetDt;}

//(2)行列转换:行转换列DataTable Dt2 = TransColToRow(Dt1);
/// <summary>/// DataTable行转换列/// 注:针对于DataTable列转换行后的表进行置换;/// </summary>/// <param name="dt"></param>/// <returns></returns>public DataTable TransColToRow(DataTable dt){    DataTable RetDt = new DataTable();    if (dt == null || dt.Rows.Count == 0 || dt.Columns.Count == 0return null;
    //首列为列标题    List<string> FirstColumnsList = GetDataTableColumnList(dt, 0);    for (int i = 0; i < FirstColumnsList.Count; i++)    {        DataColumn dc = new DataColumn();        dc.ColumnName = FirstColumnsList[i];        RetDt.Columns.Add(dc);    }
    //从2列开始插入行    for (int i = 1; i < dt.Columns.Count; i++)    {        List<string> DataList = GetDataTableColumnList(dt, i);        DataRow dr = RetDt.NewRow();        for (int j = 0; j < DataList.Count; j++)        {            dr[j] = DataList[j];        }        RetDt.Rows.Add(dr);    }    return RetDt;}
6、结构List转换为DataTable:
//(1)表数据结构类public class Student{    public string Name { getset; }    public int Age { getset; }    public string Sex { getset; }}
//(2)结构List转换为DataTableList<Student> stuList = new List<Student>();stuList.Add(new Student() { Name = "小明", Age = 18, Sex = "M" });stuList.Add(new Student() { Name = "小红", Age = 19, Sex = "S" });DataTable Dt3 = ListToDataTable<Student>(stuList);
/// <summary>/// List结构转换为DataTable通用方法  /// </summary>/// <typeparam name="T"></typeparam>/// <param name="collection"></param>/// <returns></returns>public DataTable ListToDataTable<T>(IEnumerable<T> collection){    var props = typeof(T).GetProperties();    var dt = new DataTable();    dt.Columns.AddRange(props.Select(p => new    DataColumn(p.Name, p.PropertyType)).ToArray());    if (collection.Count() > 0)    {        for (int i = 0; i < collection.Count(); i++)        {            ArrayList tempList = new ArrayList();            foreach (PropertyInfo pi in props)            {                object obj = pi.GetValue(collection.ElementAt(i), null);                tempList.Add(obj);            }            object[] array = tempList.ToArray();            dt.LoadDataRow(array, true);        }    }    return dt;}


阅读原文:原文链接


该文章在 2025/7/15 9:33:34 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved