在DataGrid中使用下拉列表ComboBox控件

在使用Microsoft.Net Framework环境下编写数据库方面的软件时,经常要用到DataGrid数据显示控件,但同时也发现,DataGrid提供的网格显示中,只有两 种:一种是普通的Text控件,另一种则是CheckBox控件,显示形式极少。但我们经常需要实现下拉列表控件的显示形式。
由 于DataGrid中列的显示样式是由DataGridTextBoxColumn和DataGridBoolColumn类控制的;前者为显示样式为 Text控件样式,后者则为CheckBox控件样式。由于我们需要在DataGrid的网格中显示ComboBox下列拉表样式,因为我们写了一个新 类,继承于DataGridTextBoxColumn类。以下是类的定义代码:
 
    ///<summary>
    /// · 本类实现 DataGrid 中实现 ComboBox 样式,并取得选取的字符串的值
    ///</summary>
    public class DataGridComboColumnString:DataGridTextBoxColumn
    {
       private ComboBox comboBox;
       private CurrencyManager _source; // 当前管理的数据源
       private int rowNum; // 记录显示控件的行
       public ComboBox Cb
       {
           get
           {
              return comboBox;
           }
       }
 
       public DataGridComboColumnString()
       {
           comboBox= new ComboBox();
           this.comboBox.Leave+=new EventHandler(comboBox_leave);
           this.comboBox.SelectedValueChanged+=new EventHandler(Select_click);
       }
       //comboBox 焦点丢失时,控件自动隐藏
       private void comboBox_leave(object sender,EventArgs e)
       {
           comboBox.Visible= false;
       }
       // 当选取下拉列表中的字符串时,将获取的字符串值返回到 DataGrid 中去
       private void Select_click(object sender,EventArgs e)
       {          this.SetColumnValueAtRow(_source,rowNum,comboBox.SelectedItem.ToString());// 设置当前列中选中行的字符串值
           comboBox.Visible= false;    
       }
       // 重写 Edit 方法,以将 Text 控件的显示样式改为 comboBox 显示样式
       protected override void Edit(CurrencyManager dataSource,int rowNum,Rectangle bounds,bool readOnly,string instanttext,bool cellVisible)
       {   base.Edit(dataSource,rowNum,bounds,readOnly,instanttext,cellVisible);
           comboBox.Parent= this.TextBox.Parent;
           comboBox.Left= this.TextBox.Left-2;
           comboBox.Top= this.TextBox.Top-2;
           comboBox.Size= new Size(this.TextBox.Width,this.comboBox.Height);
           this.TextBox.Visible=false;
           comboBox.Visible= true;
           comboBox.BringToFront();
           comboBox.Focus();
           _source=dataSource;
           this.rowNum=rowNum;
       }
    }
上面的类中,实现了ComboBox的显示样式,并将选择的字符串值返回给了当前管理的数据源。但有时,我们需要的不是选中的字符串值,而是选中的索引值时,只需要将Select_click方法,稍加改写即可,将其中的代码改为:
           this.SetColumnValueAtRow(_source,rowNum,comboBox.SelectedIndex.ToString());
comboBox.Visible= false;
即可。
下面的代码是使用此类的方法:
       DataGridComboColumnString qxdh= new DataGridComboColumnString();
       qxdh.MappingName="qxdh";
       qxdh.Width=120;
       qxdh.HeaderText="登陆人员操作单位";
       qxdh.Cb.Items.Add("41");
    qxdh.Cb.Items.Add("42");
       qxdh.Cb.Items.Add("52");
    qxdh.Cb.Items.Add("62");
当然我们也可以通过Select_click方法进行扩展,达到很多目的,比如说数据验证,或者通过获取的值进行数据库查询,以将查询所得的值返回给当前管理的数据源,也未尝不可;同样可以重载Edit函数,以实现你需要的显示样式。

转载于:https://www.cnblogs.com/chen79/archive/2007/11/24/971139.html

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值