我有一个使用动态枢轴表的查询,它将返回不同数量的列来绑定到我的DataGridView。我使用的是AutoGenerateColumns = true...which是显示枢轴列的唯一方法。如何以编程方式使其中一些列类型为DataGridViewImageColumn?当使用DataGridViewTextBoxColumn时,所有东西都会自动成为AutoGenerateColumns。我无法以编程方式创建这些列(见下面),因为我不知道将返回多少列或列名。
DataGridViewColumn col = new DataGridViewImageColumn()
col.Name = ...
col.DataPropertyName = ...
DataGridView.Columns.Add(col)当它被创建的时候,我需要这样的东西:
DataGridView1.Columns[10].Type = DataGridViewImageColumn...but我知道这是不存在的。谢谢
发布于 2014-09-10 13:34:34
如果您使用的是AutoGenerateColumns,那么在绑定源之后就不能更改它们的类型。您必须删除该列,然后将其添加回:
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");编辑:
如果不能使用列名,则可以尝试检查列中的数据类型。但是,如果您的列包含混合类型,则此解决方案会出现问题,而且在使用该数据之前,您需要检查数据源是否包含数据:
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
}
}https://stackoverflow.com/questions/25752686
复制相似问题