This is the solution that I came up with to display a DataGrid in a horizontal manner (vertical rows). I wrote a method which takes a DataSet as a parameter and returns a new DataSet with all tables flipped and now you just have to bind this DataSet’s tables to the DataGrid as you do normally and DataGrid renders vertical rows.
Introduction
Last week, when I wanted to display a DataGrid
in a horizontal manner (vertical rows), I thought there may be some property in DataGrid
to flip it, but it wasn’t the case or may be I couldn’t find it. I read online articles and forums but didn’t get very useful or easy solutions. One of the solutions I found was to nest a DataList
into a DataSet
but I didn’t find this easy; and the other was all together a new control called xrepeater
but I found mine easier than the two of them.
Let’s say you have a dataset
which you want to render through a datagrid
but you don’t want to show horizontal rows, instead you want to show the rows vertically. There may be lot of cases when you want to do that, for example, comparison between two things on several criteria (Column headings) or when you have just one or two rows to show then you would prefer the vertical rows for more clarity. Here is how the idea of flipping the table comes in.
The idea is to flip all the entries inside each table of the dataset
. This is not a very good solution, but it works fine. I wrote a method which takes a DataSet
as a parameter and returns a new DataSet
with all tables flipped and now you just have to bind this DataSet
’s tables to the DataGrid
as you do normally and DataGrid
renders vertical rows.
Old DataSet
Old Table looks like below:
Column1 | Column2 | Column3 |
Neeraj | Jain | Carios |
Tashan | Yen | Agknow |
Andrew | Ferriere | Feedback |
Flipped DataSet
New DataTable
looks like this:
0 | 1 | 2 | 3 |
Column1 | Neeraj | Tashan | Andrew |
Column2 | Jain | Yen | Agknow |
Column3 | Carios | Agknow | Feedback |
Please note that in flipped table, there are column headings as integer numbers, so when bind you it to the datagrid
, and set the property ShowHeader=false;
you are all set to render the vertical dataRows
properly.
Code
Here is the code for FlipDataSet
method, is in the code behind file for me. In method FlipDataSet
, I am doing flipping of dataset
and in BindData
, I am binding the first table of it to the DataGrid
. This is all:
private void BindData()
{
DataSet ds = this.GetDetail();
DataSet new_ds = FlipDataSet(ds);
DataView my_DataView = new_ds.Tables[0].DefaultView;
this.my_DataGrid.DataSource = my_DataView;
this.my_DataGrid.DataBind();
}
public DataSet FlipDataSet(DataSet my_DataSet)
{
DataSet ds = new DataSet();
foreach(DataTable dt in my_DataSet.Tables)
{
DataTable table = new DataTable();
for(int i=0; i<=dt.Rows.Count; i++)
{
table.Columns.Add(Convert.ToString(i));
}
DataRow r;
for(int k=0; k<dt.Columns.Count; k++)
{
r = table.NewRow();
r[0] = dt.Columns[k].ToString();
for(int j=1; j<=dt.Rows.Count; j++)
r[j] = dt.Rows[j-1][k];
}
table.Rows.Add(r);
}
ds.Tables.Add(table);
}
return ds;
}
Conclusion
Thanks for reading. Please send any questions or comments you may have (I am sure you will).
History
- 22nd September, 2003: Initial version
License
This article has no explicit license attached to it, but may contain usage terms in the article text or the download files themselves. If in doubt, please contact the author via the discussion board below. A list of licenses authors might use can be found here.