Kevin
Kevin

Reputation: 4848

Getting datarow values into a string?

I have a dataset called "results" with several rows of data. I'd like to get this data into a string, but I can't quite figure out how to do it. I'm using the below code:

string output = "";
foreach (DataRow rows in results.Tables[0].Rows)     
{
    output = output + rows.ToString() + "\n";
}

However, I think I'm missing something because this isn't working. Can someone point me in the right direction?

Upvotes: 31

Views: 131891

Answers (5)

Æthenwulf
Æthenwulf

Reputation: 220

How about some love in LinQ?

If you wan't it on List<string>

DataTable dt = new DataTable();
DataRow dr = dt.Rows[0];

List<string> outputs = dt.Select().Select(x => x.ItemArray[0].ToString()).ToList();

and if just single string

string output = string.Join(",", outputs);

Sometimes i'm reusing the data in different format. this is what i usually do.

Upvotes: 1

Matthew
Matthew

Reputation: 25793

You can get a columns value by doing this

 rows["ColumnName"]

You will also have to cast to the appropriate type.

 output += (string)rows["ColumnName"]

Upvotes: 8

SPFiredrake
SPFiredrake

Reputation: 3892

I've done this a lot myself. If you just need a comma separated list for all of row values you can do this:

StringBuilder sb = new StringBuilder();
foreach (DataRow row in results.Tables[0].Rows)     
{
    sb.AppendLine(string.Join(",", row.ItemArray));
}

A StringBuilder is the preferred method as string concatenation is significantly slower for large amounts of data.

Upvotes: 35

Khan
Khan

Reputation: 18162

You need to specify which column of the datarow you want to pull data from.

Try the following:

        StringBuilder output = new StringBuilder();
        foreach (DataRow rows in results.Tables[0].Rows)
        {
            foreach (DataColumn col in results.Tables[0].Columns)
            {
                output.AppendFormat("{0} ", rows[col]);
            }

            output.AppendLine();
        }

Upvotes: 46

Andrei G
Andrei G

Reputation: 1590

Your rows object holds an Item attribute where you can find the values for each of your columns. You can not expect the columns to concatenate themselves when you do a .ToString() on the row. You should access each column from the row separately, use a for or a foreach to walk the array of columns.

Here, take a look at the class:

http://msdn.microsoft.com/en-us/library/system.data.datarow.aspx

Upvotes: 4

Related Questions