








以前遇到要資料表要轉置時,總是要很麻煩的下SQL來轉換,現在ASP.Net提供了強大的DataTable,所以遇到要轉置的時候,用DataTable來轉置,方便又簡單喔。
---
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 Table looks like below.
| Column1 | Column2 | Column3 |
| Neeraj | Jain | Carios |
| Tashan | Yen | Agknow |
| Andrew | Ferriere | Feedback |
New DataTable looks like this
| 0 | 1 | 2 | 3 |
| Column1 | Neeraj | Tashan | Andrew |
| Column2 | Jain | Yen | Agknow |
| Column3 | Carios | Agknow | Feedback |
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(); // Some DataSet
DataSet new_ds = FlipDataSet(ds); // Flip the DataSet
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;
}


---
From : http://www.codeproject.com/cs/database/Vertical_rows_in_Datagrid.asp
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。