zoukankan      html  css  js  c++  java
  • C#中为DataGrid添加下拉列表框

    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 );
      }

      #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);
      }
     }

    }

  • 相关阅读:
    ubuntu下文件安装与卸载
    webkit中的JavaScriptCore部分
    ubuntu 显示文件夹中的隐藏文件
    C语言中的fscanf函数
    test
    Use SandCastle to generate help document automatically.
    XElement Getting OuterXML and InnerXML
    XUACompatible meta 用法
    Adobe Dreamweaver CS5.5 中文版 下载 注册码
    The Difference Between jQuery’s .bind(), .live(), and .delegate()
  • 原文地址:https://www.cnblogs.com/jhabb/p/1880778.html
Copyright © 2011-2022 走看看