C#中为DataGrid添加下拉列表框

C#中为DataGrid添加下拉列表框

本文将介绍如何在 System.Windows.Forms.DataGrid中切入使用ComboBox控件,主要包括三方面的内容。      1 . 在DataGrid中加入ComboBox列;      2 . 把在DataGrid中的修改保存到对应的网格;      3 . 设置DataGrid中网格的焦点。     下面是整个源代码,一些功能可以看注释。  using  System;  using  System.Drawing;  using  System.Collections;  using  System.ComponentModel;  using  System.Windows.Forms;  using  System.Data;  namespace  DataGridTest    public class Form1 : System.Windows.Forms.Form       private System.Windows.Forms.DataGrid dgdFunctionArea;     private DataTable dtblFunctionalArea;     private System.Windows.Forms.Button buttonFocus;     private System.ComponentModel.Container components = null    public Form1()         InitializeComponent();      PopulateGrid();     }     protected override void Dispose( bool disposing )         if( disposing )           if (components != null           components.Dispose();       }      }      base.Dispose( disposing );     }     Windows 窗体设计器生成的代码     /// <summary>     /// 应用程序的主入口点。     /// </summary>     [STAThread]     static void Main()         Application.Run(new Form1());     }     //初始化DataGrid     private void PopulateGrid()         //创建一个DataTable对象,包括四列,前三列为String,最后一列为Boolean。      dtblFunctionalArea = new DataTable ("FunctionArea");      string[] arrstrFunctionalArea = new string [3]{"Functional Area","Min","Max"}    DataColumn dtCol = null    //创建String列      for(int i=0; i< 3;i++         dtCol = new DataColumn(arrstrFunctionalArea[i]);       dtCol.DataType = Type.GetType("System.String");       dtCol.DefaultValue = ""     dtblFunctionalArea.Columns.Add(dtCol);      }      //创建Boolean列,用CheckedBox来显示。      DataColumn dtcCheck = new DataColumn("IsMandatory");      dtcCheck.DataType = System.Type.GetType("System.Boolean");      dtcCheck.DefaultValue = false    dtblFunctionalArea.Columns.Add(dtcCheck);      //把表绑定到DataGrid      dgdFunctionArea.DataSource = dtblFunctionalArea;      //为DataGrid加载DataGridTableStyle样式      if(!dgdFunctionArea.TableStyles.Contains("FunctionArea"))           DataGridTableStyle dgdtblStyle = new DataGridTableStyle();       dgdtblStyle.MappingName = dtblFunctionalArea.TableName;       dgdFunctionArea.TableStyles.Add(dgdtblStyle);       dgdtblStyle.RowHeadersVisible = false     dgdtblStyle.HeaderBackColor = Color.LightSteelBlue;       dgdtblStyle.AllowSorting = false     dgdtblStyle.HeaderBackColor = Color.FromArgb(8,36,107);       dgdtblStyle.RowHeadersVisible = false     dgdtblStyle.HeaderForeColor = Color.White;       dgdtblStyle.HeaderFont = new System.Drawing.Font("Microsoft Sans Serif", 9F,       System.Drawing.FontStyle.Bold,       System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));       dgdtblStyle.GridLineColor = Color.DarkGray;       dgdtblStyle.PreferredRowHeight = 22     dgdFunctionArea.BackgroundColor = Color.White;       //设置列的宽度       GridColumnStylesCollection colStyle = dgdFunctionArea.TableStyles[0].GridColumnStyles;       colStyle[0].Width = 100     colStyle[1].Width = 50     colStyle[2].Width = 50     colStyle[3].Width = 80    }      DataGridTextBoxColumn dgtb = (DataGridTextBoxColumn)dgdFunctionArea.TableStyles[0].GridColumnStyles[0];      ComboBox cmbFunctionArea = new ComboBox();      cmbFunctionArea.Items.AddRange(new object[]{"选项一","选项二","选项三"});      cmbFunctionArea.Cursor = Cursors.Arrow;      cmbFunctionArea.DropDownStyle= ComboBoxStyle.DropDownList;      cmbFunctionArea.Dock = DockStyle.Fill;      //在选定项发生更改并且提交了该更改后发生      cmbFunctionArea.SelectionChangeCommitted += new  EventHandler(cmbFunctionArea_SelectionChangeCommitted);      //把ComboBox添加到DataGridTableStyle的第一列      dgtb.TextBox.Controls.Add(cmbFunctionArea);     }     //设置焦点模拟     private void GetFocus(int row,int col)         //先把焦点移动到DataGrid      this.dgdFunctionArea.Focus();      //把焦点移动到DataGridCell      DataGridCell dgc = new DataGridCell(row,col);      this.dgdFunctionArea.CurrentCell = dgc;      DataGridTextBoxColumn dgtb = (DataGridTextBoxColumn)dgdFunctionArea.TableStyles[0].GridColumnStyles[col];      //设置焦点      dgtb.TextBox.Focus();     }     //把Combobox上修改的数据提交到当前的网格    private void cmbFunctionArea_SelectionChangeCommitted(object sender, EventArgs e)       this.dgdFunctionArea[this.dgdFunctionArea.CurrentCell] = ((ComboBox)sender).SelectedItem.ToString();    }    //设置新的焦点    private void buttonFocus_Click(object sender, System.EventArgs e)       //焦点模拟,这里设置第三行第一列     GetFocus(2,0);    }  }  }   

下面是测试界面:    总结,这里是通过DataGridTextBoxColumn.TextBox.Controls.Add方法实现在列中添加ComboBox控件;对于数据的保存是使用ComboBox.SelectionChangeCommitted事件来完成;设置焦点是通过DataGridTextBoxColumn.TextBox.Focus方法来实现。另外通过这个方法也可以添加DateTimePicker等类似的控件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值