继承DataGridTextColumn或DataGridColumnStyle

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/3759/3759604.xml?temp=.9119379
      

  2.   

    转的篇文章
    《在WinForm的DataGrid中加入ComboBox》
    http://www.csnote.com/csnote/blogview.asp?logID=13
      

  3.   

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

  4.   

    http://www.syncfusion.com/FAQ/WinForms/FAQ_c44c.asp
      

  5.   

    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.CaptionBackColor = System.Drawing.SystemColors.Control;
    this.dgdFunctionArea.CaptionVisible = false;
    this.dgdFunctionArea.DataMember = "";
    this.dgdFunctionArea.HeaderFont = new System.Drawing.Font("MS ゴシック", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(128)));
    this.dgdFunctionArea.HeaderForeColor = System.Drawing.Color.LightSeaGreen;
    this.dgdFunctionArea.Location = new System.Drawing.Point(3, 7);
    this.dgdFunctionArea.Name = "dgdFunctionArea";
    this.dgdFunctionArea.SelectionBackColor = System.Drawing.SystemColors.HotTrack;
    this.dgdFunctionArea.Size = new System.Drawing.Size(493, 449);
    this.dgdFunctionArea.TabIndex = 0;
    // 
    // buttonFocus
    // 
    this.buttonFocus.Location = new System.Drawing.Point(368, 464);
    this.buttonFocus.Name = "buttonFocus";
    this.buttonFocus.Size = new System.Drawing.Size(70, 20);
    this.buttonFocus.TabIndex = 1;
    this.buttonFocus.Text = "获取焦点";
    this.buttonFocus.Click += new System.EventHandler(this.buttonFocus_Click);
    // 
    // Form1
    // 
    this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);
    this.ClientSize = new System.Drawing.Size(504, 509);
    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列
    //创建Boolean列,用CheckedBox来显示
    DataColumn dtcCheck = new DataColumn(string.Empty);     
    dtcCheck.DataType = System.Type.GetType("System.Boolean");
    dtcCheck.DefaultValue = false;
    dtblFunctionalArea.Columns.Add(dtcCheck); for(int i=0; i< 3;i++)
    {    
    dtCol = new DataColumn(arrstrFunctionalArea[i]);    //head
    dtCol.DataType  = Type.GetType("System.String");    //Column Format     
    dtCol.DefaultValue = "";                           
    dtblFunctionalArea.Columns.Add(dtCol);               
    }      //把表绑定到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 = 50;
    colStyle[1].Width = 150;
    colStyle[2].Width = 150;
    colStyle[3].Width = 88;
                    colStyle[2].DataGridTableStyle.HeaderBackColor  = System.Drawing.Color.BurlyWood;     
    } DataGridTextBoxColumn dgtb = (DataGridTextBoxColumn)dgdFunctionArea.TableStyles[0].GridColumnStyles[1]; 
    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,1);
    }
    }
    }