拆分一个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;
}

 

好的,我来为您提供一个示例代码。 首先,我们需要定义一个函数来获取指定多个标题文本对应单元格列的值: ```vb.net Private Function GetColumnValues(header() As String) As List(Of String) Dim columnIndex() As Integer = Array.ConvertAll(header, Function(x) DataGridView1.Columns(x).Index) Dim columnValues As New List(Of String) For Each row As DataGridViewRow In DataGridView1.Rows Dim values As New List(Of String) For Each index As Integer In columnIndex values.Add(row.Cells(index).Value.ToString()) Next columnValues.Add(String.Join(",", values)) Next Return columnValues End Function ``` 这个函数接收一个存储多个标题文本的数组作为参数,然后使用标题文本获取其对应的列索引,并使用该索引获取单元格的值。最后,它将多个标题文本对应单元格列的值以逗号分隔的形式添加到一个列表中,并返回该列表。 接下来,我们可以使用以下代码调用上面定义的函数 GetColumnValues 来获取指定多个标题文本对应单元格列的值: ```vb.net Dim headers() As String = {"Header1", "Header2", "Header3", "Header4"} Dim columnValues As List(Of String) = GetColumnValues(headers) For Each value As String In columnValues Console.WriteLine(value) Next ``` 在这个示例中,我们首先声明一个数组来存储多个标题文本。然后,我们调用上面定义的函数 GetColumnValues 来获取指定多个标题文本对应单元格列的值,并将返回的列表存储在变量 columnValues 中。最后,我们使用循环遍历该列表,并输出每个值到控制台上。 如果你需要将这些值显示在窗体中,你可以将它们添加到一个列表框或数据表格中。这里提供一个示例代码: ```vb.net Dim headers() As String = {"Header1", "Header2", "Header3", "Header4"} Dim columnValues As List(Of String) = GetColumnValues(headers) Dim DataTable1 As New DataTable For Each header As String In headers DataTable1.Columns.Add(header) Next For Each value As String In columnValues Dim newRow As DataRow = DataTable1.NewRow() Dim values() As String = value.Split(",") For i As Integer = 0 To headers.Length - 1 newRow(headers(i)) = values(i) Next DataTable1.Rows.Add(newRow) Next DataGridView2.DataSource = DataTable1 ``` 在这个示例中,我们首先创建了一个空的数据表格 DataTable1,并使用循环遍历存储在数组中的标题文本。然后,我们使用标题文本作为列名创建一个新的数据列,并将其添加到数据表格 DataTable1 中。接下来,我们调用上面定义的函数 GetColumnValues 来获取指定多个标题文本对应单元格列的值,并将返回的列表存储在变量 columnValues 中。然后,我们使用外部循环遍历该列表,并使用 Split 函数将每个值拆分一个字符串数组 values。接着,我们使用内部循环遍历存储在数组中的标题文本,并将每个值添加到一个新的数据行 newRow 中。最后,我们将添加好的数据行添加到数据表格 DataTable1 中,并将其作为数据源绑定到另一个 DataGridView2 控件上。 希望这些示例代码能够帮助你解决问题。如果你有其他疑问或需要进一步协助,请随时联系我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值