在DataGrid中使用下拉列表框和设置焦点[翻译] - 秋枫思语 - CSDN博客
来源:百度文库 编辑:神马文学网 时间:2024/04/27 19:37:08
在DataGrid中简单使用下拉列表框 作者:Tushar Ametahttp://blog.csdn.net/zhzuo/archive/2004/05/31/22036.aspx 翻译:郑佐 在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 /// /// 应用程序的主入口点。 /// [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等类似的控件。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhzuo/archive/2004/05/31/22036.aspx
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 ///
下面是测试界面: 总结,这里是通过DataGridTextBoxColumn.TextBox.Controls.Add方法实现在列中添加ComboBox控件;对于数据的保存是使用ComboBox.SelectionChangeCommitted事件来完成;设置焦点是通过DataGridTextBoxColumn.TextBox.Focus方法来实现。另外通过这个方法也可以添加DateTimePicker等类似的控件。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhzuo/archive/2004/05/31/22036.aspx
在DataGrid中使用下拉列表框和设置焦点[翻译] - 秋枫思语 - CSDN博客
如何在Excel中创建下拉列表框_No Thinking
如何在Excel中创建下拉列表框
如何在Excel中创建下拉列表框1
如何在Word / Excel中使用下拉列表,高效选择录入表格
如何在Excel中创建下拉列表快速输入数据
在Excel中创建下拉列表快速输入数据
均线设置和使用 - 潇湘无敌手个人天空 - CSDN博客1
在C#中使用COM+实现事务控制 - zgqtxwd的专栏 - CSDN博客
在C6000系列DSP中使用EMCV - 东方未晞的老窝 - CSDN博客
在基于对话框程序中使用WM_KICKIDLE消息 - ruo_gu的专栏 - CSDN博客
Excel中建立分类下拉列表(已修改0
在程序中如何区分汉字和英语 - 沧海一声笑 - CSDN博客
在Visual C++中检测和隔离内存泄漏 - WuOu的专栏 - CSDN博客
C#中使用Excel - 前途未测 - CSDN博客
宏达管理软件社区--中国管理软件交流论坛 - 问题讨论区 - 请问如何在录入表格中设置下拉...
宏达管理软件社区--中国管理软件交流论坛2 - 问题讨论区 - 请问如何在录入表格中设置下拉...
分类下拉列表
在WEB项目中多维下拉菜单的实现技巧和方法
在EXCELl和WORD中通过下拉菜单选择录入(好技巧)
DataTable,DataView和DataGrid中一些容易混淆的概念
DataTable,DataView和DataGrid中一些容易混淆的概念
在VC 中读写INI文件 - 技术收藏 - CSDN博客
在使用风行过程中UPnP的路由器端口设置