• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

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

发布: 2007-6-30 18:56 | 作者: admin | 来源: | 查看: 16次 | 进入软件测试论坛讨论

领测软件测试网      本文将介绍如何在 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);
   }
  }
  
  }
  
    下面是测试界面:
  
  
  
  总结,这里是通过DataGridTextBoxColumn.TextBox.Controls.Add方法实现在列中添加ComboBox控件;对于数据的保存是使用ComboBox.SelectionChangeCommitted事件来完成;设置焦点是通过DataGridTextBoxColumn.TextBox.Focus方法来实现。另外通过这个方法也可以添加DateTimePicker等类似的控件。
  
  

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网