可以在datagridview中切换行和列吗? [英] Is it possible to switch rows and columns in a datagridview?
问题描述
我在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。这样我可以把所有的代码完全保留下来 - 除了网格的类型之外,我不需要改变任何东西。
如果没有这样的存在我可能只需要去写它。 (应该只需要一年左右!):
您可以创建新的DataTable,添加适当数量的collumns将值从一个表复制到另一个表,只是交换行和列。
我不认为可以设置行标题的方式与列标题相同或至少我不知道如何),所以你可以将字段名称放在单独的列。
DataTable oldTable = new DataTable();
...
DataTable newTable = new DataTable();
newTable.Columns.Add(Field Name); (int i = 0; i< oldTable.Rows.Count; i ++)
newTable.Columns.Add();
对于(int i = 0; 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;
I have 10 records of data in a DataTable which has 3 fields "Foo", "Bar", and "Baz".
If I connect wire this into a DataGridView I see 10 rows and 3 columns, and the column headers display the names of the fields.
I'm wondering how easy it is to reverse the rows and columns so that with the same data I end up with 3 rows and 10 columns, with field names being displayed in the row headers.
I can do some things manualy, like overriding an OnPaint method and drawing the field names directly into the row header cells, but I'm looking for something more automated.
Again, there's a suggestion of swapping values manualy, but unless I make all values Strings, this isn't going to work. 3 columns in a data table - Foo, Bar, and Baz of types int, float and string just won't transpose.
Even if I managed all of these manual changes, my data grids have CheckBox columns, ComboBox columns - no such row counterpart exists - there is no CheckBox row or ComboBox row. Where I currently just need to tell the compiler to "Add a ComboBoxColumn" I'd have to re-write so that every cell was generated individually.
Ideally I'd like a TransposableDataGridView which exposed all functionality of the DataGridView, with an additional bool property "Transposed". That way I could leave all of my code exactly as it is - I wouldn't have to change anything except for the type of the grid.
If nothing like this exists, I might just have to go and write it. (Should only take me a year or so! :)
You can create new DataTable, add appropriate number of collumns and then copy values from one table to the other, just swap rows and colums.
I don't think you can set row header in the same way you can set column header (or at least I don't know how), so you can put the field names in separate colum.
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;
这篇关于可以在datagridview中切换行和列吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!