Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 803
  • Last Modified:

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

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..
0
gautam_reddyc
Asked:
gautam_reddyc
1 Solution
 
rajapandian_81Commented:
I believe PIVOT operator in sql server can be used to achieve this kind of output. That result can be binded to grid.  Refer:
http://sqlserveradvisor.blogspot.com/2009/03/sql-server-convert-rows-to-columns.html

Sql Server experts can help you more on this.
0
 
abdkhlaifCommented:
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;
GridView1.DataBind();

// 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;
			dtSummary.Rows.Add(nr);
		}
	}
}

// Display the results:
GridView2.DataSource = dtSummary;
GridView2.DataBind();

Open in new window

0
 
triquetrusCommented:
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.
0
Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

 
gautam_reddycAuthor Commented:
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 ...

Thanks...
0
 
gautam_reddycAuthor Commented:
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...


0
 
gautam_reddycAuthor Commented:
Thanks abdkhlaif ... It worked....
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now