如何将 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 的值,请告诉我 ;)
我有一个 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 的值,请告诉我 ;)