如何将 DataGridview 列复制到特定索引位置 - C#?

How to duplicate a DataGridview column to particular index position - C#?

我有一个 datagridview,它有 4 个列(A、B、C、D)。条件有时是操作者可能需要使用不同的列名称(在特定索引位置)但具有完全相同的内容(例如列 header 文本 = 'copy of D')来复制列 D。我试过下面的代码。

int lastcolidx = dataGridView3.Columns["SIGNAL TYPE"].Index;
dataGridView3.Columns.Add(dataGridView3.Columns[lastcolidx].Clone() as DataGridViewColumn);

但这只是在 datagridview 的最后位置添加了新的空列,原始列的内容也没有复制到新的复制列中。请帮助我如何做到这一点

基本上你做了列部分但错过了行部分。列就像 UI(用户界面,即数据空间),行就像数据本身。这就是为什么新添加的列是空白的。您只需要填充数据行(或新列的单元格)。

给你的示例代码:

        DataTable dt = new DataTable();
        DataColumn dc1 = new DataColumn("a", typeof(string));
        DataColumn dc2 = new DataColumn("b", typeof(int));

        dt.Columns.Add(dc1); dt.Columns.Add(dc2);

        dt.Rows.Add(new object[] { "sdfs", 23 });
        dt.Rows.Add(new object[] { "adbc", 5 });

        //The following part does the copying
        DataColumn dc3 = new DataColumn("c", typeof(int));
        dt.Columns.Add(dc3);
        foreach (DataRow dr in dt.Rows) dr.SetField<int>("c", dr.Field<int>("b"));

        dataGridView1.DataSource = dt.DefaultView;

你说你的DataSource是List的。所以你可以使用额外的 属性。这将是我认为最简单的方法。例如:

这是您的类型:

public class MyClass
{
   string A {get;set;}
   string B {get;set;}
   string C {get;set;}
}

为此类型添加一个新的 属性:

public class MyClass
{
   string A {get;set;}
   string B {get;set;}
   string C {get;set;}
   string D { get{return C;}}
}

现在您总是有一个看起来像 C 的列 D。通过 Visible=true/false 您可以显示或取消显示此列。我喜欢在 DataSource 中处理所有基于数据的内容,并且只使用 dataGridView 来显示这些数据。

希望这对您有所帮助。如果您需要进一步的帮助,因为用户应该以不同的方式编辑 C 和 D 的值,请告诉我 ;)