分解數據表(將一個datatable按數據量分隔成多個table)


/// <summary>
/// 分解數據表
/// </summary>
/// <param name="originalTab">需要分解的表</param>
/// <param name="rowsNum">每個表包含的數據量</param>
/// <returns></returns>
public DataSet SplitDataTable(DataTable originalTab, int rowsNum)
{
//獲取所需創建的表數量
if (rowsNum==0) {
rowsNum = 1;
}
int tableNum = originalTab.Rows.Count / rowsNum;

//獲取數據余數
int remainder = originalTab.Rows.Count % rowsNum;

DataSet ds = new DataSet();

//如果只需要創建1個表,直接將原始表存入DataSet
if (tableNum == 0)
{
if (originalTab.Rows.Count==0) {
ds.Tables.Add(new DataTable());
}
else
{
ds.Tables.Add(originalTab);
}
}
else
{
DataTable[] tableSlice = new DataTable[tableNum];

//Save orginal columns into new table.
for (int c = 0; c < tableNum; c++)
{
tableSlice[c] = new DataTable();
foreach (DataColumn dc in originalTab.Columns)
{
tableSlice[c].Columns.Add(dc.ColumnName, dc.DataType);
}
}
//Import Rows
for (int i = 0; i < tableNum; i++)
{
// if the current table is not the last one
if (i != tableNum - 1)
{
for (int j = i * rowsNum; j < ((i + 1) * rowsNum); j++)
{
tableSlice[i].ImportRow(originalTab.Rows[j]);
}
}
else
{
for (int k = i * rowsNum; k < ((i + 1) * rowsNum + remainder); k++)
{
tableSlice[i].ImportRow(originalTab.Rows[k]);
}
}
}

//add all tables into a dataset
foreach (DataTable dt in tableSlice)
{
ds.Tables.Add(dt);
}
}
return ds;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM