/// <summary>
/// 分解数据表
/// </summary>
/// <param name="originalTable">需要分解的表</param>
/// <param name="pageSize">每个表包含的数据量</param>
/// <returns></returns>
public static DataSet SplitDataTable(System.Data.DataTable originalTable, int pageSize)
{
//获取所需创建的表数量
//int tableCount = originalTable.Rows.Count / pageSize;
//要分成的页数
int tableCount = ((originalTable.Rows.Count - 1) / pageSize) + 1;
//获取数据余数
int remainder = originalTable.Rows.Count % pageSize;
DataSet ds = new DataSet();
//如果只需要创建1个表,直接将原始表存入DataSet
if (tableCount == 1)
{
ds.Tables.Add(originalTable.Copy());
}
else
{
//表分离数组
System.Data.DataTable[] tableSlice = new System.Data.DataTable[tableCount];
//Save orginal columns into new table.
for (int n = 0; n < tableCount; n++)
{
tableSlice[n] = new System.Data.DataTable();
foreach (DataColumn dc in originalTable.Columns)
{
tableSlice[n].Columns.Add(dc.ColumnName, dc.DataType);
}
}
//Import Rows
for (int i = 0; i < tableCount; i++)
{
// if the current table is not the last one
if (i != tableCount-1)
{
for (int j = i * pageSize; j < ((i + 1) * pageSize); j++)
{
tableSlice[i].ImportRow(originalTable.Rows[j]);
}
}
else
{
for (int k = i * pageSize; k < (i * pageSize + remainder); k++)
{
tableSlice[i].ImportRow(originalTable.Rows[k]);
}
}
}
//add all tables into a dataset
foreach (System.Data.DataTable dt in tableSlice)
{
ds.Tables.Add(dt);
}
}
return ds;
}