zoukankan      html  css  js  c++  java
  • 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 );
      }

      Windows 窗体设计器生成的代码
      /// <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.cnblogs.com/luqingfei/archive/2007/03/28/691372.html

  • 相关阅读:
    语义web相关概念
    python统计代码行数
    python编程常见小技巧
    windows10 搜索桌面搜索功能失效的解决
    python批量修改文件名称
    Python面向对象编程高级特性
    Python面向对象的编程注意细节
    python基础语法学习常见小问题
    备忘录模式
    适配器模式
  • 原文地址:https://www.cnblogs.com/841019rossi/p/14829472.html
Copyright © 2011-2022 走看看