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

         }

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

         }

     }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章