当前位置:  开发笔记 > 编程语言 > 正文

是否可以在datagridview中切换行和列?

如何解决《是否可以在datagridview中切换行和列?》经验,为你挑选了1个好方法。

我在DataTable中有10条数据记录,它有3个字段"Foo","Bar"和"Baz".

如果我将它连接到DataGridView,我会看到10行和3列,列标题显示字段的名称.

我想知道反转行和列是多么容易,因此使用相同的数据我最终得到3行和10列,字段名称显示在行标题中.


我可以手工做一些事情,比如重写OnPaint方法并将字段名称直接绘制到行标题单元格中,但我正在寻找更自动化的东西.

同样,有一个建议是手动交换值,但除非我将所有值都设置为字符串,否则这不会起作用.数据表中的3列 - 类型为int,float和string的Foo,Bar和Baz不会转置.

即使我管理了所有这些手动更改,我的数据网格也有CheckBox列,ComboBox列 - 没有这样的行对应存在 - 没有CheckBox行或ComboBox行.我目前只需要告诉编译器"添加一个ComboBoxColumn",我必须重新编写,以便每个单元格都是单独生成的.

理想情况下,我想要一个TransposableDataGridView,它暴露了DataGridView的所有功能,并附加了一个bool属性"Transposed".这样我就可以完全保留我的所有代码 - 除了网格的类型之外,我不需要改变任何东西.

如果不存在这样的情况,我可能只需要去写它.(应该只花一年时间!:)



1> svick..:

您可以创建新的DataTable,添加适当数量的collumns,然后将值从一个表复制到另一个表,只需交换行和列.

我认为您不能像设置列标题一样设置行标题(或者至少我不知道如何),因此您可以将字段名称放在单独的列中.

DataTable oldTable = new DataTable();

...

DataTable newTable = new DataTable();

newTable.Columns.Add("Field Name");
for (int i = 0; i < oldTable.Rows.Count; i++)
    newTable.Columns.Add();

for (int i = 0; i < oldTable.Columns.Count; i++)
{
    DataRow newRow = newTable.NewRow();

    newRow[0] = oldTable.Columns[i].Caption;
    for (int j = 0; j < oldTable.Rows.Count; j++)
        newRow[j+1] = oldTable.Rows[j][i];
    newTable.Rows.Add(newRow);
}

dataGridView.DataSource = newTable;

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有