我有一个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的最后位置添加新的空列,原始列内容也不会复制到新的重复列。请帮我说明如何做到这一点
答案 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的值,请告诉我们;)