Urgent Help needed-Converting Datatable Rows into Columns while binding to Infragistics grid

Posted on 2010-11-07
Last Modified: 2013-11-15
Hi, Here is my scenario..
I am using Infragistics Ultra wingrid and binding with datatable

My data in SQL table

Date            Region            Percentage

1/1/2010        a              1.1

1/1/2010        b              2.2

1/1/2020        c              3.2

2/2/2010          a              2.5

2/2/2010          d              4.5

In Grid I have to show the data in this format..

Date               a            b      c      d    (Column headers in GRID)

1/1/2010       1.1      2.2    3.2    

2/2/2010       2.5                     4.5

Date and Region name shd be column header in the grid. please some one help me how to do this task..
Question by:gautam_reddyc
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
LVL 12

Expert Comment

ID: 34083054
I believe PIVOT operator in sql server can be used to achieve this kind of output. That result can be binded to grid.  Refer:

Sql Server experts can help you more on this.

Accepted Solution

abdkhlaif earned 500 total points
ID: 34083134
you can do that using DataTable & GridView:
DataTable dtOriginal = new DataTable();
// ...
// Init your DataTable here
// ...

// Display the contents of the original table:
GridView1.DataSource = dtOriginal;

// Create a new table for the summerized data:
DataTable dtSummary = new DataTable();
dtSummary.Columns.Add("Date"); // add column for the Date
foreach (DataRow dr in dtOriginal.Rows)
	if (!dtSummary.Columns.Contains(dr["Region"].ToString())) // make sure the column is not duplicated
		dtSummary.Columns.Add(dr["Region"].ToString()); // add the Region as a new column

foreach (DataRow dr in dtOriginal.Rows)
	string date = dr["Date"].ToString();
	foreach (DataRow drDate in dtOriginal.Select("Date = '" + date + "'"))
		string region = dr["Region"].ToString();
		string percentage = dr["Percentage"].ToString();

		if (dtSummary.Select("Date = '" + date + "'").Length > 0) // if the date group already exists
			dtSummary.Select("Date = '" + date + "'")[0][region] = percentage; // set the percentage under the given region
		else // otherwise, add a new row:
			nr = dtSummary.NewRow();
			nr["Date"] = date;
			nr[region] = percentage;

// Display the results:
GridView2.DataSource = dtSummary;

Open in new window


Expert Comment

ID: 34084379
Given the above problem, I would have proceeded in the following order.

Step 1: Get the data from SQL and load in a local DataSetMain variable.
Step 2: Create a temporary DataSetTemp variable
Step 3: Get the unique set of regions and create the columns in DataSetTemp dataset table
Step 4: Get the unique set of dates
Step 5: For each date in the Step 4, Query the DataSetMain variable (using DataView.RowFilter property) and create a row in the DataSetTemp
Step 6: Bind the DataSetTemp to the grid.

Hope this helps, Sorry for not giving you a code snippet.
Space-Age Communications Transitions to DevOps

ViaSat, a global provider of satellite and wireless communications, securely connects businesses, governments, and organizations to the Internet. Learn how ViaSat’s Network Solutions Engineer, drove the transition from a traditional network support to a DevOps-centric model.


Author Comment

ID: 34084675
Thanks for all for quick reply... I am not sure how to achieve this in SQL... I will try abdkhlaif solution and let you know... Hope this helps me ...


Author Comment

ID: 34087121
Hi abdkhlaif,

I am facing litle problem with your code... Can u pls help me..
foreach (DataRow drDate in dtOriginal.Select("Date = '" + date + "'"))
            string region = dr["Region"].ToString();
            string percentage = dr["Percentage"].ToString();

            if (dtSummary.Select("Date = '" + date + "'").Length > 0) // if the date group already exists
                  dtSummary.Select("Date = '" + date + "'")[0][region] = percentage; // set the percentage under the given region
            else // otherwise, add a new row:

Its not entering the Inner ForEach loop... In your case dtOriginal has data but dtSummary is coming empty with just column names.. No data is copied to dtSummary..
Please help me what is gng wrong in the inner ForEach loop.

Thanks in advance...


Author Closing Comment

ID: 34087557
Thanks abdkhlaif ... It worked....

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Update (December 2011): Since this article was published, the things have changed for good for Android native developers. The Sequoyah Project ( automates most of the tasks discussed in this article. You can even fin…
Many of us here at EE write code. Many of us write exceptional code; just as many of us write exception-prone code. As we all should know, exceptions are a mechanism for handling errors which are typically out of our control. From database errors, t…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn how to use and create keystrokes in Netbeans IDE 8.0 for Windows.

756 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question