【问题标题】:How to spit datatable into N parts using vb.net?如何使用 vb.net 将数据表拆分为 N 个部分?
【发布时间】:2012-10-02 00:57:33
【问题描述】:

我想将数据表拆分为 N 个部分。让我们假设 N = 5。

如果 datatable.rows.count 为 13,则数据表应拆分为 3 个集合 其中:

  • 第一组有 5 条记录。
  • 第二组有 5 条记录和
  • 第三组有 3 条记录。

如果 datatable.rows.count 为 16,则数据表应拆分为 4 个集合,其中:

  • 第一组有 5 条记录
  • 第二组有5条记录
  • 第三组有 5 条记录和
  • 第四组有 1 条记录。

这怎么可能?上网查了一下才知道可以这样实现Split a collection into `n` parts with LINQ?

但我想做一个简单的函数,传递数据表和 N 的值。

在循环中循环会让人困惑。

【问题讨论】:

标签: .net vb.net datatable


【解决方案1】:
'create a dtb for demo
Dim dtbSource As New DataTable("MyDataTable")
dtbSource.Columns.Add("Column1", GetType(String))
dtbSource.Columns.Add("Column2", GetType(String))
dtbSource.Columns.Add("Column3", GetType(String))
dtbSource.Rows.Add("1", "2", "3")
dtbSource.Rows.Add("2", "2", "3")
dtbSource.Rows.Add("3", "2", "3")
dtbSource.Rows.Add("4", "2", "3")
dtbSource.Rows.Add("5", "2", "3")
dtbSource.Rows.Add("6", "2", "3")
dtbSource.Rows.Add("7", "2", "3")
dtbSource.Rows.Add("8", "2", "3")
dtbSource.Rows.Add("9", "2", "3")
dtbSource.Rows.Add("10", "2", "3")
dtbSource.Rows.Add("11", "2", "3")
dtbSource.Rows.Add("12", "2", "3")
dtbSource.Rows.Add("13", "2", "3")
'now split the datatable
Dim n As Integer = 5 'number of rows per datatable
Dim dst As New DataSet("Output")
For i As Integer = 0 To dtbSource.Rows.Count - 1 Step n
  Dim intLastRow As Integer = i + n - 1
  If intLastRow > dtbSource.Rows.Count - 1 Then intLastRow = dtbSource.Rows.Count - 1
  Dim dtbNew As DataTable = dtbSource.Clone 'copy structure of original datatable 
  dtbNew.TableName = dtbSource.TableName & "_" & (i \ n).ToString
  For j As Integer = i To intLastRow
    dtbNew.ImportRow(dtbSource.Rows(j))
  Next j
  dst.Tables.Add(dtbNew)
Next i
'the split datatables are available in dst.Tables
MsgBox(dst.Tables(1).Rows(2).Item(0).ToString) 'table 2, row 3, column 1

【讨论】:

    【解决方案2】:

    这可能对您想要的有所帮助

    Dim page As Integer = 0
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim data As New DataClasses1DataContext
        Dim m = (From master In data.Masters Select master).Skip(page * 5).Take(5)
        DataGridView1.DataSource = m
        page += 1
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      相关资源
      最近更新 更多