以编程方式定义DataGridView列类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式定义DataGridView列类型相关的知识,希望对你有一定的参考价值。
我需要一种可以在运行时定义列类型的方法。
这是我的代码:
foreach (DataGridViewColumn column in this.dataGrid.Columns)
{
???
//i.e. column.type = checkbox
}
如何在此foreach循环中定义列类型?
我不是100%确定我理解你的问题,但您可以在创建列时指定列类型:
foreach (var definition in columnDefinitions) // Some list of what the column types are
{
var columnSpec = new DataColumn
{
DataType = definition.Type, // This is of type System.Type
ColumnName = defintion.Name // This is of type string
};
this.dataGrid.Columns.Add(columnSpec);
}
如果您需要在创建后更改类型 - 您不能这样做。您可以做的最好的事情是删除列并使用新类型重新创建它们。
如果我们考虑你的榜样;
foreach (DataGridViewColumn column in this.dataGrid.Columns)
{
column.ValueType = typeof(DateTime);
}
但是,假设您不希望datagridview中的所有列具有相同的类型;
this.datagrid.Columns[0].ValueType = typeof(Int32);
this.datagrid.Columns[1].ValueType = typeof(String);
this.datagrid.Columns[2].ValueType = typeof(DateTime);
当您使用数据源而不是以编程方式添加自己的列时,这尤其有用。
在创建DataGridView列之后,您无法更改其类型,但没有什么可以阻止您在运行时根据需要创建列。
因此,根据逻辑确定每列的类型,您可以根据需要创建列并将它们添加到DataGridView。
创建复选框列的示例如下:
DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn()
dataGridView1.Columns.Add(col);
如果没有关于什么决定你的列类型的更多信息,很难给出更多的建议,但你可以轻松地将这种技术与DataTable一起使用,检查每个列的类型,甚至使用对绑定datagridview的对象的反射至。
我假设您在创建DataGridView时的意思。在这种情况下,您可以在DataTable中定义它并将其连接到dgv的数据源:
例如:
var columns = new List<Tuple<string, string>>();
columns.Add(new Tuple<string, string>("Name", "System.String"));
columns.Add(new Tuple<string, string>("Selected", "System.Boolean"));
columns.Add(new Tuple<string, string>("Id", "System.Int32"));
var table = new DataTable();
columns.ForEach(c => table.Columns.Add(new DataColumn(c.Item1) { DataType = Type.GetType(c.Item2) }));
var dgv = new DataGridView();
dgv.DataSource = table;
您也可以指定按钮列,也可以像这样分配属性
DataGridViewButtonColumn column = new DataGridViewButtonColumn();
datagridview1.Columns.Add(column);
column.FlatStyle = FlatStyle.System;
column.DefaultCellStyle.ForeColor = Color.ForestGreen;
假设你使用BindingSource
var cbox = new DataGridViewCheckBoxColumn // Modify column type
{
AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells,
DataPropertyName = dgv.Columns["ColumnWantToChange"].Name,
HeaderText = "SOME HEADER NAME"
};
dgv.Columns.Add(cbox); // Add new
var r = dgv.Columns.OfType<DataGridViewTextBoxColumn>().Where(x => x.Name == "ColumnWantToChange").FirstOrDefault();
dgv.Columns.Remove(r); // Remove the original column
以上是关于以编程方式定义DataGridView列类型的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式将新列添加到 DataGridView(填充有 DataTable 的 DataGridview)
技术总结:c# 之winform datagridview自定义操作列
WPF中能把不是表格类型的数据用DataGridView控件以多行多列的方式显示出来吗?