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. }
|
感谢阅读这份帮助文档。