[WinForm] DataGridView绑定DataTable,ComboBox列绑定Dictionary
标签:
一 需求介绍一般像枚举类型的数据,我们在数据库里存储着诸如(1、2、3、4…)或者(“001”、“002”、“003”…)此类,但是界面上我们想要显示的是具体的文本内容,以便用户理解使用。所以在从数据库中加载出来的数据DataTable绑定到DataGridView上时,就需要其中一些枚举列采用下拉框,并绑定对应的枚举数据源。
二 具体实现首先,如果 DataGridView 的 AutoGenerateColumns 为 true 时,在绑定 DataTable 到 DataGridView 上时,会自动生成绑定数据中的各列,且默认均为普通的 DataGridViewTextBoxColumn 。所以如果要设置 DataGridView 中的下拉列,首先要把 AutoGenerateColumns 设置为 false。
1 /// <summary> 2 /// Sample 3 /// DataGridView绑定DataTable,ComboBox列绑定enum枚举 4 /// </summary> 5 public MainForm() 6 { 7 InitializeComponent(); 8 9 DataTable dataTable = CreateDataTable(); 10 dataGridView.AutoGenerateColumns = true;// 默认设置 11 dataGridView.DataSource = dataTable; 12 // SetGridView(dataTable); 13 } 14 15 /// <summary> 16 /// 构建数据源 17 /// 可以从数据库读取出来构建DataTable数据源 18 /// </summary> 19 /// <returns>DataTable数据表</returns> 20 public DataTable CreateDataTable() 21 { 22 DataTable dt = new DataTable(); 23 dt.Columns.Add(new DataColumn("Id", typeof(int))); 24 dt.Columns.Add(new DataColumn("Name", typeof(string))); 25 dt.Columns.Add(new DataColumn("EnumCol1", typeof(int))); 26 dt.Columns.Add(new DataColumn("EnumCol2", typeof(string))); 27 Random r = new Random(); 28 for (int i = 0; i < 50; i++) 29 { 30 DataRow dr = dt.NewRow(); 31 dr[0] = r.Next(); 32 dr[1] = "Name = " + r.Next(); 33 dr[2] = r.Next(1, 5); 34 dr[3] = "EnumCol_" + r.Next(1, 5); 35 dt.Rows.Add(dr); 36 } 37 38 return dt; 39 }
View Code效果图(AutoGenerateColumns = true):
在将 AutoGenerateColumns 属性设置为 false 后,就要手动生成各列了。其中 EnumCol1 列要绑定一个枚举类型,EnumCol2 要绑定一个字典类型(Dictionary<string, string>)。
1 /// <summary> 2 /// 枚举1 3 /// </summary> 4 private enum EnumCol1 5 { 6 A = 1, 7 B = 2, 8 C = 3, 9 D = 4, 10 E = 5 11 } 12 /// <summary> 13 /// 枚举转字典 14 /// </summary> 15 /// <typeparam></typeparam> 16 /// <param></param> 17 /// <returns></returns> 18 private Dictionary<int, string> EnumToDictionary(Type enumType) 19 { 20 Dictionary<int, string> result = new Dictionary<int, string>(); 21 foreach (int key in Enum.GetValues(enumType)) 22 { 23 string value = Enum.GetName(enumType, key); 24 result.Add(key, value); 25 } 26 27 return result; 28 }
通过上面的代码中 EnumToDictionary 方法把枚举类型转换为字典类型,这样就可以统一处理数据绑定了。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69281.html
- 上一篇:windows 安装maven 环境
- 下一篇:BaaS API 设计规范