在 DataGrid 中显示垂直行






4.46/5 (33投票s)
2003年9月22日
2分钟阅读

288111
通过水平翻转表格,在 datagrid 中显示垂直行。
引言
上周,当我想要以水平方式(垂直行)显示一个DataGrid
时,我以为DataGrid
中应该有一个属性可以翻转它,但事实并非如此,或者说我没有找到它。我在网上搜索文章和论坛,但没有找到非常有用或简单的解决方案。我找到的一个解决方案是将一个DataList
嵌套到一个DataSet
中,但我没有觉得这很容易;另一个方案是使用一个全新的控件叫做xrepeater
,但我发现我的方法比这两种都简单。
假设你有一个dataset
,你想通过一个datagrid
来渲染它,但你不想显示水平行,而是想垂直显示这些行。有很多情况下你可能需要这样做,例如,在多个标准(列标题)上比较两件事,或者当你只有一两行数据需要显示时,你可能会更喜欢垂直行以获得更高的清晰度。 这就是翻转表格的想法的由来。
这个想法是翻转dataset
中每个表中的所有条目。 这不是一个很好的解决方案,但它有效。 我编写了一个方法,它接受一个DataSet
作为参数,并返回一个新的DataSet
,其中所有表都已翻转,现在你只需要将这个DataSet
的表绑定到DataGrid
,就像你通常做的那样,DataGrid
就会渲染垂直行。
旧的 DataSet
旧的表如下所示
Column1 | Column2 | Column3 |
Neeraj | Jain | Carios |
Tashan | Yen | Agknow |
Andrew | Ferriere | 反馈 |
翻转后的 DataSet
新的DataTable
看起来像这样
0 | 1 | 2 | 3 |
Column1 | Neeraj | Tashan | Andrew |
Column2 | Jain | Yen | Agknow |
Column3 | Carios | Agknow | 反馈 |
请注意,在翻转后的表中,列标题是整数编号,因此当你将其绑定到datagrid
时,设置属性ShowHeader=false;
,你就可以正确渲染垂直的dataRows
了。
代码
这是FlipDataSet
方法的代码,它在我的代码后台文件中。 在方法FlipDataSet
中,我正在翻转dataset
,在BindData
中,我正在将它的第一个表绑定到DataGrid
。 这就是全部
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;
}
结论
感谢阅读。 如果你有任何问题或意见,请随时提出(我相信你会有)。
历史
- 2003年9月22日:初始版本
许可证
这篇文章没有明确的许可证附加到它,但可能包含文章文本或下载文件本身中的使用条款。 如果有疑问,请通过下面的讨论区联系作者。 可以在这里找到作者可能使用的许可证列表。