多年不寫 Winform 了,忽然要作一個 winform 項目,各類不順手,各類百度。async
DataGridView 數據綁定的一些細節問題,記錄備查。code
BindingList<EmployeeVO> dataSource; private async void FrmEmployeeInfo_Load(object sender, System.EventArgs e) { List<EmployeeVO> employees = await employeeApi.GetList(); dataSource = new BindingList<EmployeeVO>(employees); dgvEmployees.DataSource = dataSource; }
綁定數據後,添加刪除行,直接對 dataSource
進行 Add
和 Remove
操做,界面會自動更新。更新數據,若是直接對 dataSource
中的元素屬性進行修改,界面不會刷新,須要點擊修改的元素,纔會刷新。要當即刷新,能夠用一個新的實例替換掉 dataSource
被修改的實例。orm
dgvEmployees.AutoGenerateColumns = false;
若是實例中有些列不想顯示,就須要阻止自動建立列。string
另外,當有 Link 等列時,若是設置此屬性,Link 列的 Index
會被排在 TextBox
列以前,致使 ColumnIndex
錯亂。it
private void dgvEmployees_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (dgvEmployees.Columns[e.ColumnIndex].HeaderText == "技能") { List<SkillVO> skills = e.Value as List<SkillVO>; e.Value = string.Join(", ", skills.Select(s => s.Name)); } }