多年不寫 Winform 了,突然要做一個 winform 項目,各種不順手,各種百度。
DataGridView 數據綁定的一些細節問題,記錄備查。
數據綁定
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
被修改的實例。
阻止自動創建列
dgvEmployees.AutoGenerateColumns = false;
如果實例中有些列不想顯示,就需要阻止自動創建列。
另外,當有 Link 等列時,如果設置此屬性,Link 列的 Index
會被排在 TextBox
列之前,導致 ColumnIndex
錯亂。
自定義數據格式
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));
}
}