庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>C#语言>界面与窗体>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

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

 作者:chenyu001    日期:2005-8-8 9:50:40
字号选择〖 〗/ 双击滚屏 单击停止   
   本文将介绍如何在 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等类似的控件。
上一篇:在C#中使用属性控件添加属性窗口    下一篇:设计带图标和自定义颜色的ListBox  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: chenyu001
信息来源: 网络 录入时间: 2005-8-8 9:50:40
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿