-1

データテーブルを N 個の部分に分割したい。N = 5 とします。

datatable.rows.count が 13 の場合、データテーブルは次の 3 つのセットに分割する必要があります。

  • 最初のセットには 5 つのレコードがあります。
  • 2 番目のセットには 5 つのレコードがあり、
  • 3 番目のセットには 3 つのレコードがあります。

datatable.rows.count が 16 の場合、データテーブルは 4 つのセットに分割する必要があります。

  • 最初のセットには 5 つのレコードがあります
  • 2 番目のセットには 5 つのレコードがあります
  • 3 番目のセットには 5 つのレコードがあり、
  • 4 番目のセットには 1 つのレコードがあります。

どのように可能ですか?Web を検索しているときに、このように実現できることを知りました コレクションを LINQ で `n` の部分に分割しますか?

しかし、データテーブルと N の値が渡される単純な関数を実行したいと考えています。

ループ内でループするのは混乱します。

4

2 に答える 2

0

これはあなたが望むものに役立つかもしれません

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
于 2012-10-02T07:34:34.223 に答える
0
'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
于 2012-10-02T06:22:20.143 に答える