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

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


Author:chenyu001&;nbspFrom:Internet   本文将介绍如何在 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 );

         }

     

         #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);

           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);

        }

      }

     

      }  (2005-10-20:11:55)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [C#] 的这些文章也感兴趣:

关于 Hashtable 与 Dictionary<K, V> 性能的比较
winform 邮件编辑器的实现
GDI+中常见的几个问题(8.外传1)
如何在MFC中调用C#编写的DLL
c#摄像头编程
如何使用C#调用非托管DLL函数
基于C#的接口基础教程之三
用VisualC#来清空回收站
运用C#实现POP3邮件接收程序(2)
C#.Net网络程序开发-Socket篇