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

时间:2016-10-28 06:06:00

标签: c# datagridview datagridviewcolumn

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

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

但是,这只是在datagridview的最后位置添加新的空列,原始列内容也不会复制到新的重复列。请帮我说明如何做到这一点

2 个答案:

答案 0 :(得分:0)

基本上你做了列部分,但错过了行部分。列就像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;

答案 1 :(得分:0)

你说你的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的值,请告诉我们;)