搜档网
当前位置:搜档网 › datagridview,表格列,单元格

datagridview,表格列,单元格

datagridview,表格列,单元格
datagridview,表格列,单元格

竭诚为您提供优质文档/双击可除datagridview,表格列,单元格

篇一:datagridView关于单元格的东西

datagridView的单元格(datagridViewcell)单元格(cell)是操作datagridView的基本单位。

displayiscenteredoncells,anddataentryisoftenperform edthroughcells。

可以通过datagridViewRow类的cells集合属性访问一行包含的单元格,通过datagridView的selectedcells集合属性访问当前选中的单元格,通过datagridView的currentcell属性访问当前的单元格。

datagridViewcell类图

cell相关类和属性

datagridViewcell是一个抽象基类,所有的单元格类型都继承于此。datagridViewcell及其继承类型并不是windowsForms控件,但其中一些宿主于windowsForms控件。单元格支持的编辑功能通常都由其宿主控件来处理。

datagridViewcell对象不会像windowsForms控件那样

控制自己的外观和绘制(painting)特征,相反的,datagridView会负责其包含的单元格的外观。通过datagridView控件的属性和事件,你可以深刻地影响单元格的外观和行为。如果你对单元格定制有特殊要求,超出了datagridView提供的功能,可以继承datagridViewcell或

者它的某个子类来满足这些要求。

datagridViewcell的工作机制

理解datagridView结构的一个重要部分是理解datagridViewcell的工

作机制:

单元格的值(acell’sValue)

单元格的值是其根本所在。如果单元格所在列不是绑定列,并且所在的datagridView也不是Virtualmode,那么它的值就由它本身所持有并维护。对于那些由绑定产生的单元格,它们压根儿就不“知道”该持有什么值,当然也就不会去维护了;当datagridView需要单元格的值的时候,它会

到数据源中查询该单元格应当显示的值。在Virtualmode下,除了会触发cellValueneeded事件以获取相应单元格的值外,与数据绑定方式非常相似。在单元格级,所有这些由datagridViewcell.getValue()方法来控制。

默认情况下,单元格的值的类型为object。当一个列被绑定后,会设置它的Valuetype属性,它包含的单元格的

Valuetype也随之更新。而单元格的Valuetype对于下一步的格式化非常重要。

格式化显示(Formattingfordisplay)

注意:当datagridView需要了解“如何显示这个单元格”时,它需要的是单元格的FormattedValue,而不是Value。这是一个复杂的过程,因为格式化屏幕上的一些内容通常需要将它转换为字符串。例如,尽管你将单元格的值(Value)设置为整型值155,在显示它的时候仍需要将其格式化。单元格和其所在的列的FormattedValuetype属性决定了显示它时所用的类型。多数列使用字符串类型,而image和checkbox类型的单元格/列则使用其它类型。image类型的单元格和

列使用image作为默认的FormattedValuetype,它的内置实现了解如何去显示一个image。checkbox类型的单元格/列的FormattedValuetype属性则取决于属性threestate

的值。在单元格级,所有这些由

datagridViewcell.getFormattedValue()控制。

默认情况下,datagridView使用typeconverter将单元格的值(Value)转换为格式化的值(FormattedValue)。datagridView会基于单元格的Valuetype和FormattedValuetype属性来获取合时的typeconverter。

对于一个单元格,FormattedValue会得到多次请求(即

会在多个地方用到):绘制单元格的时候,所在列根据单元格内容自动调整大小的时候,甚至是在判断鼠标是否经过单元格内容时。每次需要FormattedValue的时候,datagridView会触发cellFormatting事件,这时你就有机会修改单元格的格式化显示了。

如果单元格不能获取它的格式化值,它会触发dataerror事件。

格式化显示单元格还包含以怎样的首选尺寸显示它。这个首选尺寸是由单元格的FormattedValue,填充区域(padding),附加显示和边框合并而成。

绘制单元格的显示(paintingthedisplay)

在获得FormattedValue后,单元格将负责绘制它的内容。单元格决定了绘制过程所使用的正确样式(参见本文档第五章的样式部分)并进行绘制。记住:如果单元格不去绘制自己,那么该单元格将不会有任何内容得到绘制(即单元格的绘制只由它自己负责),行、列不会负责

绘制任何内容,因此要确保至少要绘制单元格的背景(background),否则单元格所在的矩形区域仍然是无效的(即未经绘制)。

解析单元格的显示(parsingthedisplay)

用户开始与单元格交互后,可能会编辑单元格的值。有一件事要记住,用户编辑的实际上是单元格的

FormattedValue。用户提交所编辑的值时,FormattedValue 需要转换回单元格的值(Value),这个过程称为解析(parsing)。在单元格级上,所有这些工作由单元格的datagridViewcell.parseFormattedValue(introwindex)方法控制。

默认情况下,会再次使用typeconverter来将FormattedValue解析为单元格的真实值,这时会触发datagridView的cellparsing事件,这时你就有机会修改单元格的解析方式了。.

如果单元格不能得到正确地解析,会触发dataerror事件。

篇二:datagridView单元格实现下拉和编辑功能设置代码

privatecomboboxcmb_temp=newcombobox();

publicFormdb()

{

initializecomponent();

}

///

///绑定性别下拉列表框

///

privatevoidbindsex()

{

datatabledtsex=newdatatable();

dtsex.columns.add("Value");

dtsex.columns.add("name");

dataRowdrsex;

drsex=dtsex.newRow();

drsex[0]="1";

drsex[1]="int";

dtsex.Rows.add(drsex);

drsex=dtsex.newRow();

drsex[0]="0";

drsex[1]="char(50)";

dtsex.Rows.add(drsex);

cmb_temp.Valuemember="Value";

cmb_temp.displaymember="name";

cmb_temp.datasource=dtsex;

cmb_temp.dropdownstyle=comboboxstyle.dropdownlist;

}

privatevoidFormdb_load(objectsender,eventargse) {

//实现行可编辑

this.dgv_user.Rows[0].Readonly=false;

//绑定性别下拉列表框

bindsex();

//绑定数据表

//binddata();

//添加datagridView中的行

this.dgv_user.Rows.add(1);

//设置datagridView为可编辑

this.dgv_user.Readonly=false;

//添加datagridView中的列

//this.dgv_user.columns.add(1);

inti=convert.toint32(this.tbnum.text);

//设置下拉列表框不可见

cmb_temp.Visible=false;

//添加下拉列表框事件

cmb_temp.selectedindexchanged+=neweventhandler(cmb_ temp_selectedindexchanged);

//将下拉列表框加入到datagridView控件中

this.dgv_user.controls.add(cmb_temp);

}

//当用户选择下拉列表框时改变datagridView单元格

privatevoidcmb_temp_selectedindexchanged(objectsend er,eventargse)

{

if(((combobox)sender).text=="int")

{

dgv_user.currentcell.Value="int";

dgv_user.currentcell.tag="1";

}

else

{

dgv_user.currentcell.Value="char(50)";

dgv_user.currentcell.tag="0";

}

}

//滚动datagridView时将下拉列表框设为不可见

privatevoiddgv_user_scroll(objectsender,scrollevent argse)

{

this.cmb_temp.Visible=false;

//改变datagridView列宽时将下拉列表框设为不可见

privatevoiddgv_user_columnwidthchanged(objectsender ,datagridViewcolumneventargse){

this.cmb_temp.Visible=false;

}

//将datagridView的第二行绑定combobox控件实现下拉菜单功能

privatevoiddgv_user_currentcellchanged(objectsender ,eventargse)

{

try

{

if(this.dgv_user.currentcell.Rowindex==1)

{

Rectanglerect=

dgv_user.getcelldisplayRectangle(dgv_user.currentce ll.columnindex,

dgv_user.currentcell.Rowindex,false);

cmb_temp.left=rect.left;

cmb_temp.top=rect.top;

cmb_temp.width=rect.width;

cmb_temp.height=rect.height;

cmb_temp.Visible=true;

}

else

{

cmb_temp.Visible=false;

}

}

catch

{

}

}

privatevoiddgv_user_cellmousedoubleclick(objectsend er,

datagridViewcellmouseeventargse)

{

this.dgv_user.Rows[e.Rowindex].cells[e.columnindex]

相关主题