首页 > 开发 > 综合 > 正文

在DataGrid中简单使用下拉列表框

2024-07-21 02:23:38
字体:
来源:转载
供稿:网友
在datagrid中简单使用下拉列表框

作者:tushar ameta

翻译:秋枫

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

}

}

}


下面是测试界面:





总结,这里是通过datagridtextboxcolumn.textbox.controls.add方法实现在列中添加combobox控件;对于数据的保存是使用combobox.selectionchangecommitted事件来完成;设置焦点是通过datagridtextboxcolumn.textbox.focus方法来实现。另外通过这个方法也可以添加datetimepicker等类似的控件。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表