gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:28:28 24 4
gpt4 key购买 nike

我在 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,添加适当数量的列,然后将值从一个表复制到另一个表,只需交换行和列。

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

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;

关于c# - 是否可以在 datagridview 中切换行和列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/853663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com