在DataGrid中简单使用下拉列表框 在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 );         } 

解决方案 »

  1.   


             #region Windows 窗体设计器生成的代码         private void InitializeComponent()         {              this.dgdFunctionArea = new System.Windows.Forms.DataGrid();              this.buttonFocus = new System.Windows.Forms.Button();              ((System.ComponentModel.ISupportInitialize)(this.dgdFunctionArea)).BeginInit();              this.SuspendLayout();              //               // dgdFunctionArea              //               this.dgdFunctionArea.DataMember = "";              this.dgdFunctionArea.HeaderForeColor = System.Drawing.SystemColors.ControlText;              this.dgdFunctionArea.Location = new System.Drawing.Point(4, 8);              this.dgdFunctionArea.Name = "dgdFunctionArea";              this.dgdFunctionArea.Size = new System.Drawing.Size(316, 168);              this.dgdFunctionArea.TabIndex = 0;              //               // buttonFocus              //               this.buttonFocus.Location = new System.Drawing.Point(232, 188);              this.buttonFocus.Name = "buttonFocus";              this.buttonFocus.Size = new System.Drawing.Size(84, 23);              this.buttonFocus.TabIndex = 1;              this.buttonFocus.Text = "获取焦点";              this.buttonFocus.Click += new System.EventHandler(this.buttonFocus_Click);              //               // Form1              //               this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);              this.ClientSize = new System.Drawing.Size(332, 217);              this.Controls.Add(this.buttonFocus);              this.Controls.Add(this.dgdFunctionArea);              this.Name = "Form1";              this.Text = "Form1";              ((System.ComponentModel.ISupportInitialize)(this.dgdFunctionArea)).EndInit();              this.ResumeLayout(false);          }         #endregion          /// <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);         }     }}
      

  2.   

    http://blog.csdn.net/zhzuo/archive/2004/05/31/22036.aspx