【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); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步