您的位置:首页 > 其它

在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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: