在DataGrid中使用下拉列表ComboBox控件
2007-11-24 16:10
555 查看
在使用Microsoft.Net
Framework环境下编写数据库方面的软件时,经常要用到DataGrid数据显示控件,但同时也发现,DataGrid提供的网格显示中,只有两
种:一种是普通的Text控件,另一种则是CheckBox控件,显示形式极少。但我们经常需要实现下拉列表控件的显示形式。
由
于DataGrid中列的显示样式是由DataGridTextBoxColumn和DataGridBoolColumn类控制的;前者为显示样式为
Text控件样式,后者则为CheckBox控件样式。由于我们需要在DataGrid的网格中显示ComboBox下列拉表样式,因为我们写了一个新
类,继承于DataGridTextBoxColumn类。以下是类的定义代码:
[align=left] ///<summary>[/align]
[align=left] /// ·本类实现DataGrid中实现ComboBox样式,并取得选取的字符串的值[/align]
[align=left] ///</summary>[/align]
[align=left] public class DataGridComboColumnString:DataGridTextBoxColumn[/align]
[align=left] {[/align]
[align=left] private ComboBox comboBox;[/align]
[align=left] private CurrencyManager _source; //当前管理的数据源[/align]
[align=left] private int rowNum; //记录显示控件的行[/align]
[align=left] public ComboBox Cb[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] return comboBox;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public DataGridComboColumnString()[/align]
[align=left] {[/align]
[align=left] comboBox=new ComboBox();[/align]
[align=left] this.comboBox.Leave+=new EventHandler(comboBox_leave);[/align]
[align=left] this.comboBox.SelectedValueChanged+=new EventHandler(Select_click);[/align]
[align=left] }[/align]
[align=left] //comboBox 焦点丢失时,控件自动隐藏[/align]
[align=left] private void comboBox_leave(object sender,EventArgs e)[/align]
[align=left] {[/align]
[align=left] comboBox.Visible=false;[/align]
[align=left] }[/align]
[align=left] //当选取下拉列表中的字符串时,将获取的字符串值返回到DataGrid中去[/align]
[align=left] private void Select_click(object sender,EventArgs e)[/align]
[align=left] { this.SetColumnValueAtRow(_source,rowNum,comboBox.SelectedItem.ToString());//设置当前列中选中行的字符串值[/align]
[align=left] comboBox.Visible=false; [/align]
[align=left] }[/align]
[align=left] //重写Edit方法,以将Text控件的显示样式改为comboBox显示样式[/align]
[align=left] protected override void Edit(CurrencyManager dataSource,int rowNum,Rectangle bounds,bool readOnly,string instanttext,bool cellVisible)[/align]
[align=left] { base.Edit(dataSource,rowNum,bounds,readOnly,instanttext,cellVisible);[/align]
[align=left] comboBox.Parent=this.TextBox.Parent;[/align]
[align=left] comboBox.Left=this.TextBox.Left-2;[/align]
[align=left] comboBox.Top=this.TextBox.Top-2;[/align]
[align=left] comboBox.Size=new Size(this.TextBox.Width,this.comboBox.Height);[/align]
[align=left] this.TextBox.Visible=false;[/align]
[align=left] comboBox.Visible=true;[/align]
[align=left] comboBox.BringToFront();[/align]
[align=left] comboBox.Focus();[/align]
[align=left] _source=dataSource;[/align]
[align=left] this.rowNum=rowNum;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]上面的类中,实现了ComboBox的显示样式,并将选择的字符串值返回给了当前管理的数据源。但有时,我们需要的不是选中的字符串值,而是选中的索引值时,只需要将Select_click方法,稍加改写即可,将其中的代码改为:[/align]
[align=left] this.SetColumnValueAtRow(_source,rowNum,comboBox.SelectedIndex.ToString());[/align]
[align=left]comboBox.Visible=false;[/align]
[align=left]即可。[/align]
[align=left]下面的代码是使用此类的方法:[/align]
[align=left] DataGridComboColumnString qxdh=new DataGridComboColumnString();[/align]
[align=left] qxdh.MappingName="qxdh";[/align]
[align=left] qxdh.Width=120;[/align]
[align=left] qxdh.HeaderText="登陆人员操作单位";[/align]
[align=left] qxdh.Cb.Items.Add("41");[/align]
[align=left] qxdh.Cb.Items.Add("42");[/align]
[align=left] qxdh.Cb.Items.Add("52");[/align]
[align=left] qxdh.Cb.Items.Add("62");[/align]
[align=left]当然我们也可以通过Select_click方法进行扩展,达到很多目的,比如说数据验证,或者通过获取的值进行数据库查询,以将查询所得的值返回给当前管理的数据源,也未尝不可;同样可以重载Edit函数,以实现你需要的显示样式。[/align]
Framework环境下编写数据库方面的软件时,经常要用到DataGrid数据显示控件,但同时也发现,DataGrid提供的网格显示中,只有两
种:一种是普通的Text控件,另一种则是CheckBox控件,显示形式极少。但我们经常需要实现下拉列表控件的显示形式。
由
于DataGrid中列的显示样式是由DataGridTextBoxColumn和DataGridBoolColumn类控制的;前者为显示样式为
Text控件样式,后者则为CheckBox控件样式。由于我们需要在DataGrid的网格中显示ComboBox下列拉表样式,因为我们写了一个新
类,继承于DataGridTextBoxColumn类。以下是类的定义代码:
[align=left] ///<summary>[/align]
[align=left] /// ·本类实现DataGrid中实现ComboBox样式,并取得选取的字符串的值[/align]
[align=left] ///</summary>[/align]
[align=left] public class DataGridComboColumnString:DataGridTextBoxColumn[/align]
[align=left] {[/align]
[align=left] private ComboBox comboBox;[/align]
[align=left] private CurrencyManager _source; //当前管理的数据源[/align]
[align=left] private int rowNum; //记录显示控件的行[/align]
[align=left] public ComboBox Cb[/align]
[align=left] {[/align]
[align=left] get[/align]
[align=left] {[/align]
[align=left] return comboBox;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] public DataGridComboColumnString()[/align]
[align=left] {[/align]
[align=left] comboBox=new ComboBox();[/align]
[align=left] this.comboBox.Leave+=new EventHandler(comboBox_leave);[/align]
[align=left] this.comboBox.SelectedValueChanged+=new EventHandler(Select_click);[/align]
[align=left] }[/align]
[align=left] //comboBox 焦点丢失时,控件自动隐藏[/align]
[align=left] private void comboBox_leave(object sender,EventArgs e)[/align]
[align=left] {[/align]
[align=left] comboBox.Visible=false;[/align]
[align=left] }[/align]
[align=left] //当选取下拉列表中的字符串时,将获取的字符串值返回到DataGrid中去[/align]
[align=left] private void Select_click(object sender,EventArgs e)[/align]
[align=left] { this.SetColumnValueAtRow(_source,rowNum,comboBox.SelectedItem.ToString());//设置当前列中选中行的字符串值[/align]
[align=left] comboBox.Visible=false; [/align]
[align=left] }[/align]
[align=left] //重写Edit方法,以将Text控件的显示样式改为comboBox显示样式[/align]
[align=left] protected override void Edit(CurrencyManager dataSource,int rowNum,Rectangle bounds,bool readOnly,string instanttext,bool cellVisible)[/align]
[align=left] { base.Edit(dataSource,rowNum,bounds,readOnly,instanttext,cellVisible);[/align]
[align=left] comboBox.Parent=this.TextBox.Parent;[/align]
[align=left] comboBox.Left=this.TextBox.Left-2;[/align]
[align=left] comboBox.Top=this.TextBox.Top-2;[/align]
[align=left] comboBox.Size=new Size(this.TextBox.Width,this.comboBox.Height);[/align]
[align=left] this.TextBox.Visible=false;[/align]
[align=left] comboBox.Visible=true;[/align]
[align=left] comboBox.BringToFront();[/align]
[align=left] comboBox.Focus();[/align]
[align=left] _source=dataSource;[/align]
[align=left] this.rowNum=rowNum;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]上面的类中,实现了ComboBox的显示样式,并将选择的字符串值返回给了当前管理的数据源。但有时,我们需要的不是选中的字符串值,而是选中的索引值时,只需要将Select_click方法,稍加改写即可,将其中的代码改为:[/align]
[align=left] this.SetColumnValueAtRow(_source,rowNum,comboBox.SelectedIndex.ToString());[/align]
[align=left]comboBox.Visible=false;[/align]
[align=left]即可。[/align]
[align=left]下面的代码是使用此类的方法:[/align]
[align=left] DataGridComboColumnString qxdh=new DataGridComboColumnString();[/align]
[align=left] qxdh.MappingName="qxdh";[/align]
[align=left] qxdh.Width=120;[/align]
[align=left] qxdh.HeaderText="登陆人员操作单位";[/align]
[align=left] qxdh.Cb.Items.Add("41");[/align]
[align=left] qxdh.Cb.Items.Add("42");[/align]
[align=left] qxdh.Cb.Items.Add("52");[/align]
[align=left] qxdh.Cb.Items.Add("62");[/align]
[align=left]当然我们也可以通过Select_click方法进行扩展,达到很多目的,比如说数据验证,或者通过获取的值进行数据库查询,以将查询所得的值返回给当前管理的数据源,也未尝不可;同样可以重载Edit函数,以实现你需要的显示样式。[/align]
相关文章推荐
- 在DataGrid中使用下拉列表ComboBox控件
- C# 程序中如何向(DEV)ComboBoxEdit控件中添加下拉列表的值不使用数据绑定,就是使用代码添加
- 不错的下拉列表.HTML控件和服务器控件都可以使用
- 下拉列表:comboBox控件
- Android常用控件—Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)
- 使用EXT实现ComboBox多列下拉列表
- 在CComboBox组合框控件中 使用AddString()函数修改下拉列表项却出现乱序
- [Struts2]s:combobox标签在使用出现问题:改变下拉列表的选中值,文本框的值不能随着被改变
- Spinner类控件的使用(下拉列表的使用)
- 【Android 开发】:UI控件之 Spinner 下拉列表控件的使用
- 下拉列表comboBox的使用
- Windows Mobile 中ComboBox【下拉列表】的使用
- 重写winform 的 ComboBox控件实现自动加载磁盘下拉列表框
- C#:DataGridView中列类型使用时间控件和下拉列表的自动匹配
- Datagrid列表控件使用
- Extjs4中的Form之下拉列表combobox的使用
- DropdownList下拉列表控件的使用
- combobox下拉列表控件 关联绑定两个表的技巧
- 在 DataGridColumnStyle 的单元格中使用 DateTimePicker、ComboBox、NumericUpDown 等控件
- Windows Mobile 中ComboBox【下拉列表】的使用