您的位置:首页精文荟萃软件资讯 → C#中为DataGrid添加下拉列表框

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

时间:2004/10/8 13:18:00来源:本站整理作者:蓝点我要评论(0)

  本文将介绍如何在 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
  ///


  /// 应用程序的主入口点。
  ///

  [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等类似的控件


相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本