简体   繁体   中英

loop through datatable to create a string that looks like this

I want to loop through my datatable column called SDESCR and created a string that looks like this.

Dim labels As String() = {"North", "South", "East", "West", "Up", "Down"}

this is what i am trying and it is not working

Dim labels As String() 
For Each row As DataRow In tablegraph.Rows
            labels = labels " ' " + row.Item("SDESCR") + " ',"
        Next row

THANK YOU FOR THE HELP, I WILL TEST THEM TOMORROW AND SEE WHICH WORKS BEST AND MARK ONE CORRECT.

Do this instead

Dim labels As String()
Dim labelsList As List(Of String) = New List(Of String)
For Each row As DataRow In tablegraph.Rows
  labelsList.Add(row.Item("SDESCR"))
Next

labels = labelsList.ToArray()

If you need it to be a comma delimited list instead you can just do

Dim commaLabels As String = String.Join(labels, ",")

If you need them stored in an array, then you can add them to a list and then call the ToArray() method on the list:

    Dim labelList As New List(Of String)
    For Each row As DataRow In tablegraph.Rows
        labelList.Add(row.Item("SDESCR"))
    Next row

    Dim labels As String() = labelList.ToArray()

If you mean a String-Array instead of a String, this works:

Dim labels(tablegraph.Rows.Count - 1) As String
For i As Int32 = 0 To tablegraph.Rows.Count - 1
    labels(i) = tablegraph(i)("SDESCR").ToString
Next

If you want them separated with a comma, you can use a StringBuilder to append:

 Dim labels As New System.Text.StringBuilder
 For i As Int32 = 0 To tablegraph.Rows.Count - 1
     labels.Append(" ' ").Append(tablegraph(i)("SDESCR").ToString).Append(" ',")
 Next
 If labels.Length <> 0 Then labels.Length -= 1 'remove last comma'
 Dim labelString As String = labels.ToString 

If you want a string, use this (string builder is best due to memory management issues with constant string declaration.

Dim labels As New StringBuilder()
For Each row As DataRow In tablegraph.Rows
            labels.Append(" ' " + row.Item("SDESCR") + " ',")
        Next row

Then when you need the string, use labels.ToString()

If you want an array, use this...

Dim labels As New List(Of String)()
For Each row As DataRow In tablegraph.Rows
            labels.Add(row.Item("SDESCR"))
        Next row

Then when you need the array, use labels.ToArray()

The main reason your above code is failing is that you are declaring an Array of strings.

There are plenty of ways to do this; here is an approach using LINQ

Dim labels As String() = (From myRow In tablegraph _
                          Select CType(myRow.Item("SDESCR"), String)).ToArray
  • It's worth nothing that this will fail for NULL/NOTHING values of "SDESCR".

If you just want a single comma-separated values you can do this:

Dim sOutput = String.Join(",", (From myRow In tablegraph _
                                Select CType(myRow.Item("SDESCR"), String)).ToArray)
labels = labels " ' " + row.Item("SDESCR") + " ',"
               ^

Plus sign missing? Also, when you do this you'll be left with an extra , at the end of your string. So you'll want to strip that off.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM