DataGrid中简单使用下拉列表框的简单方法

时间:2010年04月12日 点击:253

  在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 窗体设计器生成的代码

///
/// 应用程序的主入口点。
///

[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等类似的控件。

更多DotNet好文章www.zdexe.com

赞助商链接

热门内容

相关内容

联系我们

联系方式