2012-10-10 57 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