【问题标题】:How to duplicate a DataGridview column to particular index position - C#?如何将 DataGridview 列复制到特定的索引位置 - C#?
【发布时间】:2016-10-28 23:14:50
【问题描述】:

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

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

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

【问题讨论】:

  • 我建议您复制数据源中的列。然后按照您的描述创建新的 GridColumn 并将 DataSource 中的新列绑定到它。
  • 您的数据源是哪种类型? DataTable or List or sth?
  • 我的数据源是List类型的
  • 看看我的答案:p

标签: c# datagridview datagridviewcolumn


【解决方案1】:

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

【讨论】:

  • 是否有一条语句可以克隆整个行数据?/我知道我们可以这样做 datagridview3.rows[0].cells[1].value = datagridview3.rows[0].cells[1 ]。价值;我不想为每个单元格数据编写这样的代码
  • 例如,在 excel 中,我们可以复制整个 A 列并粘贴到 B 列中。我想用我的 datagridview 以编程方式执行相同的功能
  • 我已经更新了上面的示例代码。您的问题不应该有单一的解决方案。 :-(
【解决方案2】:

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

【讨论】:

  • 非常感谢塞比。
猜你喜欢
  • 1970-01-01
  • 2014-01-17
  • 2023-03-05
  • 1970-01-01
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
  • 2021-03-25
相关资源
最近更新 更多