Winfrom的Combobox控件
@()[WinForm|Combobox控件|]
ComboBox控件
@()[WinForm|Combobox|]
Combobox控件的问题
Combobox为下拉选择菜单
Combobox有三种模式为:
- 【DropDown】:可以编辑,也可以下拉选择
- 【Simple】:可以编辑,具体不清楚,可能通过事件可以自动补全
- 【DropDownList】:禁止编辑只能下拉选择
###Combobox的数据填充
第一:
以控件编辑器直接写死
第二;
以代码方式add添加第三种动态获取【根据需求使用,例如性别就俩值男女,直接add写死】
第一种【遍历添加】
1 2 3 4 5 6 7
| 1. private void DoBindData() 2. { 3. for (int i = 0; i < 5; i++) 4. { 5. comboBox1.Items.Add(i + 1); 6. } 7. }
|
第二种进行数据源绑定:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 1. private void DoBindDataSource() 2. { 3. //构造数据源(或从数据库中查询) 4. DataTable ADt = new DataTable(); 5. DataColumn ADC1 = new DataColumn("F_ID", typeof(int)); 6. DataColumn ADC2 = new DataColumn("F_Name", typeof(string)); 7. ADt.Columns.Add(ADC1); 8. ADt.Columns.Add(ADC2); 9. for (int i = 0; i < 3; i++) 10. { 11. DataRow ADR = ADt.NewRow(); 12. ADR[0] = i+1; 13. ADR[1] = "Name_" + (i+1); 14. ADt.Rows.Add(ADR); 15. } 16. //进行绑定 17. comboBox1.DisplayMember = "F_Name";//控件显示的列名 18. comboBox1.ValueMember = "F_ID";//控件值的列名 19. comboBox1.DataSource = ADt; 20. }
|
第三种数据库类型的数据源绑定
1 2 3 4 5 6 7 8
| 1. public void usertype()//加载用户类型 2. { 3. DataTable table = SqlHelper.ExecuteDataTable(书写SQL语句); 4. cbxtype.DataSource = table; 5. cbxtype.DisplayMember = "tb_name";//显示的值 6. cbxtype.ValueMember = "GUID";//实际选项值 7. this.tbxxibie.SelectedIndex = -1;//首次默认选项 8. }
|
####Combobox的第三种模式【DropDownList】
由于这种模式是禁止编辑的,如果查询是作为条件查询,启动程序第一次的时候没关系,但是一旦SelectedIndex了之后就无法改为空值,这样查找全部数据的时候就会出现错误,所谓为了防止这种情况的出现,我们一般都会添加一个默认值,例如:“请添加”,“请选择”,下面说一下我的思路:
#####Combobox的item排序
Oder by后面的case when 一个值then 数字(让前面的值第几个显示,0为第一个)else 1 end(else 后面的数字为其它的值从1开始排序到结束)
1
| 1. where tb_num=1 or tb_num=6 order by case when tb_name='---请选择---' then 0 else 1 end
|
###逻辑思路:
即在数据库的属性添加一行唯一分组唯一值,例如:“请添加”,“请选择”
这样我们把这个值和其他固定的类型分组的值一同填充到控件里面,就是在sql语句where后面添加一个or+这个唯一分组;
然后我们对这个combobox控件进行判断,combobox的.Text就是显示的值,value是实际值,我就对控件进行是否为空是否为空字符串进行判断,简单的方法就是对length(长度)进行判断;
同时或一个条件,combobox的Text值与上面的唯一值“请添加”,“请选择”进行双等号的比对,如果是双等于就让该控件为空,这样dal里面的sql语句where后面就不会添加该条件,就达到了我们想要的让它为空的目的;
if的判断有了,当然还有一个else,else当然是让它等于选择的item了
逻辑思路到此结束!
例如:(我这里是做的不等于判断,也就不需要else)
1 2 3 4
| 1. if ("---请选择---" != tbxruxue.Text.ToString() && null != tbxruxue.SelectedValue) 2. { 3. peopleModel.people_ruxue = tbxruxue.SelectedValue.ToString(); 4. }
|
感谢阅读这份帮助文档。