您的位置:首页 > 编程语言 > C#

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

2008-06-17 18:55 543 查看

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 窗体设计器生成的代码#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);


  }


}




}





下面是测试界面:



   总结,这里是通过DataGridTextBoxColumn.TextBox.Controls.Add方法实现在列中添加ComboBox控件;对于数据的保存是使用ComboBox.SelectionChangeCommitted事件来完成;设置焦点是通过DataGridTextBoxColumn.TextBox.Focus方法来实现。另外通过这个方法也可以添加DateTimePicker等类似的控件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: