1.定义一个datatable,设为成员变量:
成员变量相当于全局变量,要写在整个类里面,主方法外面
DataTable BigTable = new DataTable();
列和表格的列相同,如果有实体的话,列可以这样设置:
var type = typeof(DeviceInfo); //DeviceInfo为实体
foreach (var property in type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance))
{
BigTable.Columns.Add(property.Name, property.PropertyType);
}
2.存入数据,datatable存数据的方法为挨列存,代码如下:
DataRow Row = BigTable.NewRow();
//将数据存入Row
BigTable.Rows.Add(Row);
这只是一行数据的写法,如果要插入多行数据,可以把这个方法封装起来,把数据当作参数传进去,或者你做假数据的话,循环就可以了。
3.将BigTable存到dataviewgrid里面,要先转化为datagridview的格式:
dataGridView1.DataSource = BigTable.DefaultView;
4.下面在winform界面中进行配置,把BigTable的属性存入表格的列里:
把列名存在这个里面,然后dataSource选择无就可以了,但是要把数据源加进来:
我认为加进来他才会引用,然后它会因为咱们写的那句话直接把数据塞进来,所以就不需要在ui里再设置一下,不知道我的理解正不正确;
如果自己设置的列后面出现了其他的列,就是因为后台datatable的列没有和表格里的列匹配上,要注意取property的时候类名不要写错了,还有就是表格列的value一定要配。
如有问题还望指正!谢谢!
二、不设column,在代码中灵活设置column
设置columns:
List<DataGridViewColumnEntity> listColumns1 = new List<DataGridViewColumnEntity>();
listColumns1.Add(new DataGridViewColumnEntity() { DataField = "ID", HeadText = "序号" });
ucDataGridView1.Columns = listColumns1;
然后定义一个Gridmodel的class,用来存数据源:
public class Gridmodel
{
public string ID { get; set; }
public string xName { get; set; }
public string yName { get; set; }
}
一开始我没有设get;set;后来绑定的时候就绑不上,想知道为什么;
然后绑定数据源:
List<Gridmodel> dataSource = new List<Gridmodel>();
//这句话是写在循环里的,所以有i,理解就好;
dataSource.Add(new Gridmodel() { ID = index.ToString(), xName = i.Key.ToString(), yName = i.Value.ToString() });
ucDataGridView1.DataSource = dataSource;