拆分一个DataTable为多个DataTable

拆分一个DataTable为多个DataTable

/// <summary>
/// 分解数据表
/// </summary>
/// <param name="originalTab">需要分解的表</param>
/// <param name="rowsNum">每个表包含的数据量</param>
/// <returns></returns>
public DataSet SplitDataTable(DataTable originalTab, int rowsNum)
{
    //获取所需创建的表数量
    int tableNum = originalTab.Rows.Count / rowsNum;
    //获取数据余数
    int remainder = originalTab.Rows.Count % rowsNum;
    DataSet ds = new DataSet();
    //如果只需要创建1个表,直接将原始表存入DataSet
    if (tableNum == 0)
    {
        ds.Tables.Add(originalTab.Copy());
    }
    else
    {
        DataTable[] tableSlice = new DataTable[tableNum];
        //Save orginal columns into new table.            
        for (int n = 0; n < tableNum; n++)
        {
            tableSlice[n] = new DataTable();
            foreach (DataColumn dc in originalTab.Columns)
            {
                tableSlice[n].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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值