2012-10-10 56 views
0

我有一個數據表,我想一列轉換爲一個字符串與所有的列名,因此,格式如: column1_name:column1_content。 column2_name:column2_content ...vb.net每個塊有一個額外運行(運行兩次)

我差點它做我想要的方式,但結果將是重複兩次相同的字符串。例如,一個字符串「abc」是我想要的,但它會返回「abcabc」。

沒關係,當我只有1行時,我可以使用exit關鍵字在1次運行後終止循環,但是現在我有多於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 
+0

我用你的代碼在一個簡單的測試,無法重現該問題。嘗試手工製作一些示例數據以查看是否出現問題。 –

回答

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() 
+0

謝謝,重新測試我自己的代碼後,它似乎一切正常,我沒有修改任何東西。我不知道爲什麼昨天給我「翻倍」的結果。我沒有名譽來讚揚你的回覆,但我真的很感激。 – Cal

+0

不用擔心,我很高興你的工作。快樂編程! – SSS