科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在Form中增加listbox同checkbox(图)

在Form中增加listbox同checkbox(图)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将介绍如何在 System.Windows.Forms.DataGrid中切入使用ComboBox控件,主要包括三方面的内容。

作者: 来源:中国IT实验室 2008年6月7日

关键字: ListBox 增加 VB vb.net Windows

  • 评论
  • 分享微博
  • 分享邮件
本文将介绍如何在 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等类似的控件。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章