0

データテーブルがあり、1 つの行をすべての列名を含む単一の文字列に変換したいので、形式は column1_name: column1_content のようになります。column2_name: column2_content...

結果は同じ文字列が2回繰り返されることを除いて、ほぼ希望どおりに実行できました。たとえば、文字列「abc」が必要ですが、「abcabc」が返されます。

行が 1 つしかないときは問題ありません。exit キーワードを使用して 1 回の実行後にループを終了できましたが、今では複数の行を持つデータテーブルがあり、これは予想外だったので、ループを終了する必要があります。理由を見つけるのを手伝ってください。ありがとう。

コードは次のとおりです。

    Dim column As New DataColumn
    Dim dt As New DataTable
    dt.Load(dr)

    For Each row As DataRow In dt.Rows
        Dim i As Integer = 0
        For Each column In dt.Columns
            If Not IsDBNull(row.ItemArray.GetValue(i)) Then
                sData = sData & column.ColumnName & ": " & row.ItemArray.GetValue(i).ToString & ". " & vbLf
            End If
            i = i + 1
        Next
    Next
4

1 に答える 1

0

これを試して

'set up dummy data
Dim dtb As New DataTable
dtb.Columns.Add(New DataColumn("Col0", GetType(String)))
dtb.Columns.Add(New DataColumn("Col1", GetType(String)))
dtb.Columns.Add(New DataColumn("Col2", GetType(String)))
dtb.Rows.Add("R0C0", "R0C1", "R0C2")
dtb.Rows.Add("R1C0", "R1C1", "R1C2")
'extract rows
Dim sbl As New System.Text.StringBuilder
For intRow As Integer = 0 To dtb.Rows.Count - 1
  Dim drw As DataRow = dtb.Rows(intRow)
  For intCol As Integer = 0 To dtb.Columns.Count - 1
    If drw.Item(intCol) IsNot Nothing Then
      sbl.AppendLine("Row " & intRow.ToString & " " & dtb.Columns(intCol).ColumnName & ": " & drw.Item(intCol).ToString & ". ")
    End If
  Next intCol
Next intRow
MsgBox(sbl.ToString)
dtb.Dispose()
于 2012-10-11T02:10:18.617 に答える