前言
一个特殊的项目没有用第三方控件库,但用到了DataGridView,由于是客户端产生的数据,所以原始数据源就是一个集合。
根据需要会向集合中添加数据项,或是修改某些数据项的值,但DataGridView并没有提供像RefreshDataSource类似接口。
以为有很简单的解决办法[是的,我指的就是个函数调用],找了一会儿却发现都挺麻烦的样子。最后采用了自己熟悉的做法。
DataGridView绑定数据源:
List<T> source = new List<T>();
DataGridView1.DataSource = new BindingSource { DataSource = source };
解决方法一
[Added201907092253,此方法不太适合于集合作为数据源,需要进一步转换,但切合标题所以写在这儿了]
把数据项T类中的属性作为DataColumn加到DataTable中,然后将DataTable作为表格数据源即可:DataGridView1.DataSource=dataTable;
集合source中的每个T实例就是DataTable中的一行数据。以法二中的Character为例简单在下面写一下代码(现打有错请见谅):
System.Data.DataTable dt = new DataTable("tableName");
dt.Columns.Add(new DataColumn { ColumnName= "Name" }); // 列名按需,表格中列标题好像显示的是列名
dt.Columns.Add(new DataColumn { ColumnName= "年龄" });
dt.Columns.Add(new DataColumn { ColumnName= "Gender" });
dt.Columns.Add(new DataColumn { ColumnName= "Stature" });
DataGridView1.DataSource = dt;
// 添加数据
DataRow dr = dt.NewRow();
dr["年龄"] = 27;
dt.Rows.Add(dr);
dt.AcceptChanges();
// 改变数据
dt.Rows[0]["Gender"] = "1";
解决方法二
数据项T类实现System.ComponentModel.INotifyPropertyChanged接口。MSDN上有该接口示例代码,有时间我再补充完整。
来了~1203
接着上面说哈,T is Character,下面是Character类,实现INotifyPropertyChanged接口。
1 public class