DataTable数据分页
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace ConsoleApplication16
{
public static class ListAndDataTableExtension
{
public static DataTable ToDataTable<T>(this List<T> list) where T : new()
{
DataTable table = new DataTable();
PropertyInfo[] ps = typeof(T).GetProperties();
ps.ToList().ForEach(p => {
if (!p.PropertyType.IsGenericType)
{
table.Columns.Add(p.Name, p.PropertyType);
}
else
{
if (p.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
table.Columns.Add(p.Name,Nullable.GetUnderlyingType(p.PropertyType));
}
}
});
list.ForEach(obj => {
DataRow row = table.NewRow();
ps.ToList().ForEach(p => {
row[p.Name] = p.GetValue(obj);
});
table.Rows.Add(row);
});
return table;
}
public static List<T> ToList<T>(this DataTable table) where T : new()
{
List<T> list = new List<T>();
PropertyInfo[] ps = typeof(T).GetProperties();
foreach (DataRow row in table.Rows)
{
T obj = new T();
foreach (DataColumn col in table.Columns)
{
ps.ToList().ForEach(p => {
if (p.Name == col.ColumnName)
{
if (!p.PropertyType.IsGenericType)
{
p.SetValue(obj, string.IsNullOrEmpty(row[p.Name].ToString()) ? null : Convert.ChangeType(row[p.Name], p.PropertyType));
}
else
{
if (p.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
p.SetValue(obj,string.IsNullOrEmpty(row[p.Name].ToString())?null:Convert.ChangeType(row[p.Name],Nullable.GetUnderlyingType(p.PropertyType)));
}
}
}
});
}
list.Add(obj);
}
return list;
}
}
public class Studen
{
public int? StuNo { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
public override string ToString()
{
string s = string.Empty;
PropertyInfo[] ps = typeof(Studen).GetProperties();
ps.ToList().ForEach(p => { s += p.Name + "\t" + p.GetValue(this).ToString(); });
return s;
}
}
class Program
{
public static List<Studen> stuList = new List<Studen>();
static void Main(string[] args)
{
for (int i = 1; i <=14; i++)
{
stuList.Add(new Studen() { StuNo=i,Name=i.ToString(),Sex=i.ToString(),Age=i});
}
DataTable table = stuList.ToDataTable<Studen>();
List<Studen> stus = table.ToList<Studen>();
DataTable table2 = table.Clone();
DataTable table3 = table.Clone();
int rows = table.Rows.Count;
int pageSize = 5;
int pages = rows / pageSize;
foreach (DataRow oldRow in table.Rows)
{
DataRow NewRow = table3.NewRow();
NewRow.ItemArray = oldRow.ItemArray;
table3.Rows.Add(NewRow);
}
if (rows <= pageSize)
{
//分页插入的时候每次清空上次的数据
table2.Rows.Clear();
for (int i = 1; i <= rows; i++)
{
DataRow oldRow = table.Rows[i - 1];
DataRow newRow = table2.NewRow();
newRow.ItemArray = oldRow.ItemArray;
table2.Rows.Add(newRow);
}
Console.WriteLine("第一页的数据如下:");
List<Studen> students = table2.ToList<Studen>();
students.ForEach(obj => { Console.WriteLine(string.Format(obj.ToString())); });
//这里行bulkcopy的插入语句直接传入DataTable
}
else
{
for (int pageIndex = 1; pageIndex <=pages; pageIndex++)
{
Console.WriteLine(string.Format("第{0}页数据如下:",pageIndex));
//分页插入的时候每次清空上次的数据
table2.Rows.Clear();
for (int j = (pageIndex - 1) * pageSize + 1; j <= pageIndex * pageSize; j++)
{
DataRow oldRow = table.Rows[j - 1];
DataRow newRow = table2.NewRow();
newRow.ItemArray = oldRow.ItemArray;
table2.Rows.Add(newRow);
Console.WriteLine(table.ToList<Studen>()[j-1].ToString());
//这里行bulkcopy的插入语句直接传入DataTable
}
}
if (rows % pageSize != 0)
{
//分页插入的时候每次清空上次的数据
table2.Rows.Clear();
int skip = rows % pageSize;
Console.WriteLine(string.Format("最后一页数据如下:"));
for (int j = pages * pageSize + 1; j <= pageSize * pages + skip; j++)
{
DataRow oldRow = table.Rows[j - 1];
DataRow newRow = table2.NewRow();
newRow.ItemArray = oldRow.ItemArray;
table2.Rows.Add(newRow);
Console.WriteLine(table.ToList<Studen>()[j - 1].ToString());
//这里行bulkcopy的插入语句直接传入DataTable
}
}
}
#region 大小写间隔 转换成大写加下划线
string s = "AbcDefGhi";
s = Regex.Replace(s, @"([A-Z]{1})([a-z]*)", MatchEval);
s = s.TrimEnd('_');
#endregion
#region 大写下划线 转换成 大小写间隔
string s2 = "ABC_EDF_FSD";
List<string> strList = s2.Split('_').ToList();
s2 = "";
foreach (string str in strList)
{
s2 += Regex.Replace(str, @"([A-Za-z]{1})([A-Za-z]*)", MatchEvalEntity);
}
#endregion
Console.ReadKey();
}
private static string MatchEvalEntity(Match match)
{
return match.Groups[1].Value.ToUpper() + match.Groups[2].Value.ToLower();
}
private static string MatchEval(Match match)
{
return match.Groups[1].Value.ToUpper() + match.Groups[2].Value.ToUpper()+"_";
}
}
}
DataTable数据分页的更多相关文章
- [.NET] SQL数据分页查询
[.NET] SQL数据分页查询 程序下载 范例下载:点此下载 原始码下载:点此下载 NuGet封装:点此下载 数据查询 开发系统时,使用C#执行SQL查询指令,就可以从SQL数据库里查询所需数据. ...
- C#针对DataTable进行分页方法
以下的分页方法是针对数据量不是非常大的数据进行的,是在内存中进行的分页操作. /// <summary> /// DataTable分页 /// </summary> /// ...
- js 从一个json拼接成另一个json,并做json数据分页table展示
先给数据: //原始json数据json = [{"id":"1","aid":"013","performa ...
- thinkphp5配合datatable插件分页后端处理程序
thinkphp5配合datatable插件分页后端处理程序第一版DataTable.php v.1.0 <?php use think\Db; /** * DataTable.php. */ ...
- ASP.NET真分页_接前篇引用AspNetPager.dll进行数据分页
一.前端准备工作 1.之前我写到过<Asp.net中引用AspNetPager.dll进行数据分页> 这种分页方式只能在前台将数据分页,而每次点击查询时对目标数据库还是全查询,这样不仅会 ...
- mysq大数据分页
mysql limit大数据量分页优化方法 Mysql的优化是非常重要的.其他最常用也最需要优化的就是limit.Mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急 ...
- excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)
将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...
- DataTable数据批量写入数据库三种方法比较
DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1) insert循环插入:2) sqldataadapter.update(dataset,tablename); ...
- c# applibrary实现一个Sheet表中存放多张DataTable数据
1.工具类(applibrary.dll) public class ExcelHelper { /// <summary> /// 文件名 /// </summary> pu ...
随机推荐
- 【STL源码学习】std::list类的类型别名分析
有了点模板元编程的traits基础,看STL源码清晰多了,以前看源码的时候总被各种各样的typedef给折腾得看不下去, 将<list>头文件的类继承结构简化如下 #include < ...
- java内存占用问题(一)
Nocturne 2012-12-24 java数组内存占用问题. 30 Contact[] ca = new Contact[10]; while(x<10){ ca[x]=new ...
- mysql实战优化之一:sql优化
1.选取最适用的字段属性 MySQL 可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得 ...
- Python文件操作,with open as追加文本内容实例
最常见的读写操作 import re with open('/Users/Mr.Long/Desktop/data.txt', 'w') as f: f.write('hello world') 就这 ...
- Asp.net mvc 限制路由参数类型
routes.MapRoute( "Activity2", // 路由名称 "Activity/{id}&qu ...
- 遇到版本兼容问题时 Newtonsoft.Json
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <depen ...
- mysql数据安全一之数据恢复案例
mysql数据安全一之数据恢复案例 --chenjianwen 应用场景:适宜开启binlog 日志功能,定时备份并使用--master-data参数备份,在某个时间点丢失数据,用于数据恢复 开篇总结 ...
- 第二章:Android Studio概述(二)[学习Android Studio汉化教程]
The Main Menu Bar 主菜单栏 主菜单栏位于Android Studio的最上面,你几乎可以利用主菜单和其子菜单来执行任何操作.不像Android Studio中其他的一些菜单,主菜单 ...
- Tkinter Dimensions
Tkinter Dimensions: 各种长度,宽度,和其他部件的尺寸可以在许多不同的单位描述 各种长度,宽度,和其他部件的尺寸可以在许多不同的单位描述. 如果您设置了尺寸为整数,它被假定为 ...
- stm32库函数FSMC_NORSRAMInit()解析
这是一段对nor存储器的时序进行编程的函数,函数形式为void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct),里面 ...