前言
今天跟大家分享的主題是基于自定義特性實(shí)現(xiàn)DataGridView全自動(dòng)生成。
實(shí)現(xiàn)過(guò)程
這里是在上一篇文章《給你的屬性加個(gè)說(shuō)明》的基礎(chǔ)上,對(duì)其做進(jìn)一步應(yīng)用。
給你的屬性加個(gè)說(shuō)明
首先創(chuàng)建一個(gè)窗體應(yīng)用,在窗體里拖放一個(gè)DataGridView控件和一個(gè)生成數(shù)據(jù)的按鈕,將DataGridView控件的啟用添加、啟用編輯、啟用刪除的勾選都去掉。
后臺(tái)編寫一個(gè)初始化DataGridView的方法,代碼如下。
private void InitialDataGridView()
{
Type t = typeof(Points);
foreach (PropertyInfo pi in t.GetProperties())
{
//獲取屬性名稱
string propertyName = pi.Name;
//獲取顯示文本
string displayName = pi.GetCustomAttribute<CustomAttribute>()?.DisplayName;
//獲取顯示寬度
int displayWidth = pi.GetCustomAttribute<CustomAttribute>().DisplayWidth;
DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn()
{
HeaderText = displayName,
Width = displayWidth,
DataPropertyName = propertyName,
SortMode = DataGridViewColumnSortMode.NotSortable,
AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet
};
this.dgvMain.Columns.Add(column);
}
}
然后在構(gòu)造方法里初始化調(diào)用一下:
public FrmMain()
{
InitializeComponent();
this.dgvMain.AutoGenerateColumns = false;
InitialDataGridView();
}
接著在生成數(shù)據(jù)按鈕添加一些數(shù)據(jù),代碼如下:
private void btn_Generate_Click(object sender, EventArgs e)
{
List<Points> Points = new List<Points>();
for (int i = 1; i < 10; i++)
{
Points.Add(new Points()
{
StationNo = "站點(diǎn)" + 1,
TD_P1 = 123,
TD_P2 = 456,
});
}
this.dgvMain.DataSource = null;
this.dgvMain.DataSource = Points;
}
點(diǎn)擊生成數(shù)據(jù)按鈕,效果如下:
這樣就實(shí)現(xiàn)了動(dòng)態(tài)生成DataGridView控件,后續(xù)如果需要更改名稱或者增加列,直接去實(shí)體類修改即可,不需要再去修改DataGridView了。
這種方式非常適用于列數(shù)非常多且不確定因素非常多的情況,比如配方應(yīng)用等。