Winform中DataGridView网格添加ComBoBox

在工作中遇到需要在DataGridView网格中添加ComBoBox的需求.解决后记录

1 在窗体类中声明一个全局的变量ComBoBox,并在Form的Load事件中设置号ComBoBox的下拉选项

2 在DataGridView绑定完数据源之后,将ComBoBox添加到DataGridView中

3 编写DataGridView的CurrentCellChanged事件和ComBoBox的SelectedIndexChanged事件

完整代码如下:

public partial class Form1 : Form
{
  ComboBox cmb = new ComboBox();
  public Form1()
  {
    InitializeComponent();
    this.dgv1.AutoGenerateColumns = false;
  }

  private void Form1_Load(object sender, EventArgs e)
  {
    LoadDataSource();
    InitCmb();
    this.dgv1.Controls.Add(cmb);
    this.dgv1.CurrentCellChanged += new System.EventHandler(this.dgv1_CurrentCellChanged);
  }

  private void InitCmb()
  {
    this.cmb.Items.Add("新增");
    this.cmb.Items.Add("删除");
    this.cmb.Items.Add("修改类型");
    this.cmb.SelectedIndexChanged += new System.EventHandler(this.cmb_SelectedIndexChanged);
  }

  private void cmb_SelectedIndexChanged(object sender, EventArgs e)
  {
    dgv1.CurrentCell.Value = cmb.Text;
  }

  private void LoadDataSource()
  {
    DataTable tb = new DataTable();
    tb.Columns.Add("序号", typeof(Int32));
    tb.Columns.Add("字段名");
    tb.Columns.Add("操作");

    DataRow dr = tb.NewRow();
    dr["序号"] = 1;
    dr["字段名"] = "Name";
    dr["操作"] = "";
    tb.Rows.Add(dr);

    dr = tb.NewRow();
    dr["序号"] = 2;
    dr["字段名"] = "Gender";
    dr["操作"] = "";
    tb.Rows.Add(dr);

    this.dgv1.DataSource = tb;

  }

  private void dgv1_CurrentCellChanged(object sender, EventArgs e)
  {
    if (dgv1.DataSource == null)
      return;
    DataTable tb = (DataTable)dgv1.DataSource;
    DataGridViewCell currentCell = dgv1.CurrentCell;
    if (currentCell != null && currentCell.RowIndex < tb.Rows.Count && currentCell.OwningColumn.Name == "C操作")
    {
      Rectangle rect = dgv1.GetCellDisplayRectangle(currentCell.ColumnIndex, currentCell.RowIndex, true);
      cmb.Text = currentCell.Value.ToString();
      cmb.Size = rect.Size;//其实这里设置它的Size,只有width有效,如果要Height有效,需要重写ComBoBox控件,系统自带的ComBoBox空间的高度只能通过字体大小来自动适应
      cmb.Top = rect.Top;
      cmb.Left = rect.Left;
      cmb.Visible = true;
    }
    else
    {
    cmb.Visible = false;
    }
  }

}

原文地址:https://www.cnblogs.com/lylongs/p/10361926.html

时间: 2024-10-12 20:29:44

Winform中DataGridView网格添加ComBoBox的相关文章

C# Winform中DataGridView的DataGridViewCheckBoxColumn使用方法

下面介绍Winform中DataGridView的DataGridViewCheckBoxColumn使用方法: DataGridViewCheckBoxColumn CheckBox是否选中 在判断DataGridView中CheckBox选中列的时候,用DataGridViewRow.Cells[0].FormattedValue.ToString()=="True"语句时存在问题,当我们直接点击CheckBox时,结果显示未选中,但是如果我们在点击其他单元格时,结果显示选中.而用

winform中的ListBox和ComboBox绑定数据用法实例

本文实例讲述了winform中的ListBox和ComboBox绑定数据用法.分享给大家供大家参考.具体实现方法如下: 本例实现将集合数据绑定到ListBox和ComboBox控件,界面上显示某个属性的内容,代码如下: 代码如下: //- //自定义了Person类(有Name,Age,Heigth等属性) List<Person> persons=new List<Person>(); persons.Add(new Person("WuMiao",18,17

winform中DataGridView实现分页功能

http://liyaguang20111105.blog.163.com/blog/static/19929420220146283255809/ 在winform的设计中,要实现对DataGridView控件的分页功能,需要两个控件:BindingSource.BindingNavigator,根据需求可对BindingNavigator进行自由的扩展,下图的示例则是根据一般需求对分页功能的实现.红色区域是对BindingNavigator控件扩展后的效果. 具体实现过程 : //窗体构造方

winform中DataGridView添加ComboBox的最终解决方案(点击ComboBox默认显示当前行的内容)

第一: 数据绑定ComBoBox控件 先在窗体设计时拖一个ComBoBox控件,然后在里面的ITEMS设好你要下拉项,或者从数据库中的表绑定,这个估计都会. 第二: // 将下拉列表框加入到DataGridView控件中,这句放在绑定DataGridView之后写. 在窗体的Load方法中加入:g_DataGridView.Controls.Add(g_ComBoBox);也就是把ComBoBox控件添加到DataGridView控件中第三: 在DataGridView控件的CurrentCel

Winform 中DataGridView控件添加行标题

有很多种方法. 1.可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value) 1 /// <summary> 2 /// 行状态更改时发生 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 pri

C#winform中DataGridView常用的属性

1.AllowUserToAddRows属性:指示是否向用户显示添加行的选项 AllowUserToOrderColumns属性:指示是否允许通过手动对列重新定位 AllowUserToResizeColumns属性:指示用户是否可以调整列的大小 AllowUserToResizeRows属性:指示用户是否可以调整行的大小 2.ColumnHeadersVisible属性:指示是否显示列标题行    RowHeadersVisible属性:指示是否显示包含行标题的列 3.ReadOnly属性:指

winform中DataGridView的数据实现导出excel

1,窗体设计 首先需要引入程序集:Microsoft.Office.Interop.Excel  (如果没有引用过的需要右键添加引用再搜索就行了) 实现的方法: /// <summary> /// /// </summary> /// <param name="fileName">文件路径</param> /// <param name="myDGV">控件DataGridView</param>

C#winform中datagridview导出Excel

只需要传入datagridview的name即可. 1 //导出Excel()方法 2 public void ToExcel(DataGridView dataGridView) 3 { 4 //实例化一个Excel.Application对象 5 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 6 7 if (excel == null)

WinForm中DataGridView验证单元格输入的是数字

转载:http://www.cnblogs.com/ganqiyin/archive/2013/02/18/2915491.html 事件:DataGridView验证单元格输入的是数字,DataGridView源数据是从数据库读取的. 需求:当用户输入的不是数字的时候需要提示信息(数据是直接绑定数据库的,因此dataGridView有自己的报错功能,我们需要屏蔽掉它,显示自己的错误提示!) 实现: 选择DataGridView的CellValidating事件 (1)  验证整数: 1 pri