Winform 绑定下拉列表

Winform 中 GrideView 中下拉列的绑定问题,其实之前做过的,好久没再用过,今天突然用到竟然又费了九牛二虎之力,好纠结地说。。虽然最后问题出在一个数据类型的细节的,所以还是 Mark 一下,加强记忆 . 代码部分很少,我把使用设计视图中产生的EF 代码和常用的 DataTable 和 IList 三种数据源绑定放在一起,比较一下其实跟普通的绑定一样 :

            // TODO: 这行代码将数据加载到表“dS_Student.SEXENUM”中。您可以根据需要移动或删除它。
            this.sEXENUMTableAdapter.Fill(this.dS_Student.SEXENUM);
            // TODO: 这行代码将数据加载到表“dS_Student.STUDENTINFO”中。您可以根据需要移动或删除它。
            this.sTUDENTINFOTableAdapter.Fill(this.dS_Student.STUDENTINFO);
            // 使用数据源工具时产生的自动代码
            this.sEXDataGridViewTextBoxColumn.DataSource = this.sEXENUMBindingSource;
            this.sEXDataGridViewTextBoxColumn.DisplayMember = "LABELTEXT";
            this.sEXDataGridViewTextBoxColumn.ValueMember = "VALUE";
            this.sEXDataGridViewTextBoxColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True;
            this.sEXDataGridViewTextBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
            // 记得设置这个哟
            dataGridView1.AutoGenerateColumns = false;
            // List 数据源
            List<ComboItem> list = new List<ComboItem>();
            list.Add(new ComboItem("女", 0));
            list.Add(new ComboItem("男", 1));
            // DataTable 数据源
            DataTable dtSex = new DataTable();
            DataColumn columnLABELTEXT = new global::System.Data.DataColumn("LABELTEXT", typeof(string), null, global::System.Data.MappingType.Element);
            dtSex.Columns.Add(columnLABELTEXT);
            DataColumn columnVALUE = new global::System.Data.DataColumn("VALUE", typeof(int), null, global::System.Data.MappingType.Element);
            dtSex.Columns.Add(columnVALUE);
            columnLABELTEXT.MaxLength = 20;
            dtSex.Rows.Add(new object[] { "女", 0 });
            dtSex.Rows.Add(new object[] { "男", 1 });
            // 绑定到 List
            sEXDataGridViewTextBoxColumn.DataSource = list;
            // 绑定到  DataTable
            sEXDataGridViewTextBoxColumn.DataSource = dtSex;

1,使用可视化指定列的显示类型后,即 DataGridViewComboBoxColumn

2. 创建该下拉列所依赖的数据源,可以是.Net通用的数据源绑定方式,包括 DataTable , IList

3. 确认 DisplayMember 、ValueMember  和 关联列有没有写对,数据类型是不是一致的。

今天的问题就是跪在第三步了,Oracle中没有bool类型所以就使用 Number(1,0) 结果产生的表的字段类型为 Decimal ,然后数据类型就不一致了,然后就挂了

4.一个修改自动生成EF实体数据类型的小捷径。

Winform 绑定下拉列表_第1张图片

可以从下拉列表里面选择自己需要的数据类型,对于Oracle 中的 Number 在.Net 平台中识别为 Decimal ,即便我的定义是 number(1,0) 这样的逻辑上的整数值。.Net 平台会负责正常的数据类型强制转换,当然你需要决定是不是必须考虑精度和溢出这样特定的情景。

 --  对于 定义为 Number (1,0) 的 性别 这个属性来说,自然不存在这个问题。

你可能感兴趣的:(绑定)