C#中为DataGrid添加下拉列表框(转载)

本文将介绍如何在 System.Windows.Forms.DataGrid中切入使用ComboBox控件,主要包括三方面的内容。

  1. 在DataGrid中加入ComboBox列;

  2. 把在DataGrid中的修改保存到对应的网格;
 
  3. 设置DataGrid中网格的焦点。

  下面是整个源代码,一些功能可以看注释。

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


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

转载:https://www.cnblogs.com/icesnaker/archive/2004/09/21/45015.html

上一篇:WPF DataGrid自定义复选框


下一篇:隐藏 DataGrid 中 DataSource 为 DataTable 的 DataColumn (Visual C#)