首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DataGridViewColumn更改AutoGenerateColumns的类型

使用DataGridViewColumn更改AutoGenerateColumns的类型
EN

Stack Overflow用户
提问于 2014-09-09 20:01:16
回答 1查看 5.4K关注 0票数 2

我有一个使用动态枢轴表的查询,它将返回不同数量的列来绑定到我的DataGridView。我使用的是AutoGenerateColumns = true...which是显示枢轴列的唯一方法。如何以编程方式使其中一些列类型为DataGridViewImageColumn?当使用DataGridViewTextBoxColumn时,所有东西都会自动成为AutoGenerateColumns。我无法以编程方式创建这些列(见下面),因为我不知道将返回多少列或列名。

代码语言:javascript
复制
DataGridViewColumn col = new DataGridViewImageColumn()
col.Name = ...
col.DataPropertyName = ...
DataGridView.Columns.Add(col)

当它被创建的时候,我需要这样的东西:

代码语言:javascript
复制
DataGridView1.Columns[10].Type = DataGridViewImageColumn

...but我知道这是不存在的。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-10 13:34:34

如果您使用的是AutoGenerateColumns,那么在绑定源之后就不能更改它们的类型。您必须删除该列,然后将其添加回:

代码语言:javascript
复制
        DataTable dt = new DataTable();
        dataGridView1.DataSource = dt;

        DataGridViewImageColumn imageCol = new DataGridViewImageColumn();
        imageCol.Name = "target_column";
        imageCol.DisplayIndex = dataGridView1.Columns["source_column"].DisplayIndex + 1;

        dataGridView1.Columns.Add(imageCol);

        for(int index = 0; index < dt.Rows.Count; index ++)
        {
            dataGridView1.Rows[index].Cells["target_column"].Value = dt.Rows[index]["source_column"];
        }

        dt.Columns.Remove("source_column");

编辑:

如果不能使用列名,则可以尝试检查列中的数据类型。但是,如果您的列包含混合类型,则此解决方案会出现问题,而且在使用该数据之前,您需要检查数据源是否包含数据:

代码语言:javascript
复制
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
   if (dataGridView1.Rows[0].Cells[column.Name].Value.GetType() == typeof(System.Drawing.Bitmap)) //Or whatever type you store your image as
   {
      //Do the copy over
   }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25752686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档