【C#】DataTable使用汇总


一、用法

https://www.cnblogs.com/Sandon/p/5175829.html

 

二、获取排序后的DataTable

dt.DefaultView.Sort = "ID";//列名
DataTable dtCopy = dt.Copy();
dtCopy = dv.ToTable();

 参考:https://blog.csdn.net/weixin_30613727/article/details/99164276

 

三、取DataTable前几行数据

/// <summary>  
/// 获取DataTable前几条数据  
/// </summary>  
/// <param name="TopItem">前N条数据</param>  
/// <param name="oDT">源DataTable</param>  
/// <returns></returns>  
public static DataTable DtSelectTop(int TopItem, DataTable oDT)  
{  
    if (oDT.Rows.Count < TopItem) return oDT;  
  
    DataTable NewTable = oDT.Clone();  
    DataRow[] rows = oDT.Select("1=1");  
    for (int i = 0; i < TopItem; i++)  
    {  
        NewTable.ImportRow((DataRow)rows[i]);  
    }  
    return NewTable;  
}  

 

DataTable.ImportRow()方法:

https://www.kmorg.cn/ruanjiankaifa11077

四、datatable和dataset区别及用法

1、区别

https://www.cnblogs.com/cb1186512739/p/9431570.html

2、用法

https://www.cnblogs.com/wenjie0904/p/7719751.html

 

五、DataTable数据量大时的数据处理方法


1、DataTable数据量大,循环处理数据的时候优化速度

https://blog.csdn.net/sky_cat/article/details/62423076

2、DataTable采集的数据多,导致用户界面显示缓慢

https://wenwen.sogou.com/z/q801897900.htm

 

六、解决DataTable.Rows.Add(dr)语句执行速度慢的问题(GridControl)

一般情况下,填充DataTable的方法是:

先添加列:

DataTable.Columns.Add("列1");

DataTable.Columns.Add("列2");

……

 

再添加行:

DataRow dr = DataTable.NewRow();

dr["列1"] = data1;

dr["列2"] = data2;

……

DataTable.Rows.Add(dr);

 

调试的时候发现,Rows.Add(dr);这句运行起码得要200多毫秒,多循环几次,界面控件得几十秒才加载出来,简直反人类  = =||| 

 

然后查了一下资料,发现是绑定数据源的地方错了。

我原来是在添加列以后,就直接把DataTable绑定到 控件.DataSource了,然后再NewRow()添加行的。

把数据源绑定放在添加行之后,DataTable.Rows.Add(dr);的执行速度就降到20ms左右了,加载速度好歹能接受了。

 

不过还有需要优化的地方——数据源绑定的语句在大数据量时速度也会很慢!!

 

用DataGridView的话,好像可以这么改:https://www.cnblogs.com/Angel-szl/p/12937842.html

不过我用的是GridControl和LayoutView,还没找到什么好的办法,等待高手指点……

 

PS:如果要设置LayoutView某行的可见性,用LayoutView.Columns["列名"].Visible比

用LayoutView.Columns.ColumnByFieldName("列名").Visible要快一丢丢。

 

七、返回某列中的最大值

int maxKeyIndex = dt2.AsEnumerable().Select(t => t.Field<int>("keyIndex")).Max();

 

八、复制

Copy()方法是拷贝对应的的结构和数据生成新的DataTable;
Clone()只是复制对应的结构并不复制数据生成新的DataTable。

DataTable table1 = dt.Copy();
DataTable table2 = dt.Clone();

如果使用Clone(),有两个方法可以将原DataTable的行数据复制到新DataTable中:

dt.ImportRow(datarow);// 将行数据导入到新DataTable中
dt.Add(datarow.ItemArray);// 将结构相同的添加到新Table中

 

深度复制

        public static DataTable DeepClone(DataTable dt)
        {
            using (var ms = new MemoryStream())
            {
                var formatter = new BinaryFormatter();
                formatter.Serialize(ms, dt);
                ms.Position = 0;
                return (DataTable)formatter.Deserialize(ms);
            }
        }

 

posted @ 2021-04-19 13:31  不溯流光  阅读(811)  评论(0编辑  收藏  举报