datagridview表格列单元格.docx
- 文档编号:24004231
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:11
- 大小:19.37KB
datagridview表格列单元格.docx
《datagridview表格列单元格.docx》由会员分享,可在线阅读,更多相关《datagridview表格列单元格.docx(11页珍藏版)》请在冰豆网上搜索。
datagridview表格列单元格
竭诚为您提供优质文档/双击可除
datagridview,表格列,单元格
篇一:
datagridView关于单元格的东西
datagridView的单元格(datagridViewcell)单元格(cell)是操作datagridView的基本单位。
displayiscenteredoncells,anddataentryisoftenperformedthroughcells。
可以通过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(objectsender,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,scrolleventargse)
{
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.currentcell.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(objectsender,
datagridViewcellmouseeventargse)
{
this.dgv_user.Rows[e.Rowindex].cells[e.columnindex].Readonly=false;//将当前单元格设为可读
this.dgv_user.currentcell=
this.dgv_user.Rows[e.Rowindex].cells[e.columnindex];//获取当前单元格
this.dgv_user.beginedit(true);//将单元格设为编辑状态
}
篇三:
datagridView控件的各种操作总结
c#winForm开发datagridView控件的各种操作总结
c#winForm开发datagridView控件的各种操作总结(单元格操作,属性设置)
文章分类:
.net编程
c#winForm开发datagridView控件的各种操作总结(单元格操作,属性设置)20xx-01-2520:
15
一、单元格内容的操作
*****//取得当前单元格内容
console.writeline(datagridView1.currentcell.Value);
//取得当前单元格的列index
console.writeline(datagridView1.currentcell.columnindex);//取得当前单元格的行index
console.writeline(datagridView1.currentcell.Rowindex);
*******另外,使用datagridView.currentcelladdress属性(而不是直接访问单定单元格所在的行:
datagridView.currentcelladdress.y和列:
datagridView.currentcelladdress避免取消共享行的共享非常有用。
当前的单元格可以通过设定datagridView对象的currentcell来改变。
可以通currentcell来设定
datagridView的激活单元格。
将currentcell设为nothing(null)可以取消激//设定(0,0)为当前单元格
datagridView1.currentcell=datagridView1[0,0];
在整行选中模式开启时,你也可以通过currentcell来设定选定行。
///
///向下遍历
///
///
///
privatevoidbutton4_click(objectsender,eventargse)
row];
...{introw=this.datagridView1.currentRow.index+1;if(row>this.datagridView1.Rowcount-1)row=0;this.datagridView1.currentcell=this.datagridView1[0,}
///
///向上遍历
///
///
///
privatevoidbutton5_click(objectsender,eventargse)
...{
introw=this.datagridView1.currentRow.index-1;if(row row=this.datagridView1.Rowcount-1;
this.datagridView1.currentcell=this.datagridView1[0,row];
}
*注意:
this.datagridView的索引器的参数是:
columnindex,rowindex或是columnname,rowindex
这与习惯不同。
********datagridView设定单元格只读:
1)使用Readonly属性
如果希望,datagridView内所有单元格都不可编辑,那么只要:
//设置datagridView1为只读
datagridView1.Readonly=true;此时,用户的新增行操作和删除行操作也被屏蔽了。
******如果希望,datagridView内某个单元格不可编辑,那么只要:
//设置datagridView1的第2列整列单元格为只读
datagridView1.columns[1].Readonly=true;
//设置datagridView1的第3行整行单元格为只读
datagridView1.Rows[2].Readonly=true;
//设置datagridView1的[0,0]单元格为只读
datagridView1[0,0].Readonly=true;
*******datagridView行头列头的单元格
//改变datagridView1的第一列列头内容
datagridView1.columns[0].headercell.Value="第一列";
//改变datagridView1的第一行行头内容
datagridView1.Rows[0].headercell.Value="第一行";
//改变datagridView1的左上头部单元内容
datagridView1.topleftheadercell.Value="左上";
另外你也可以通过headertext来改变他们的内容。
//改变datagridView1的第一列列头内容
datagridView1.columns[0].headertext="第一列";
***********datagridView单元格的tooltip的设置
datagridView.showcelltooltips=true的情况下,单元格的tooltip可以表示出来。
对于单元格窄小,无法完全显示的单元格,tooltip可以显示必要的信息。
1)设定单元格的tooltip内容
//设定单元格的tooltip内容
datagridView1[0,0].tooltiptext="该单元格的内容不能修改";
//设定列头的单元格的tooltip内容
datagridView1.columns[0].tooltiptext="该列只能输入数字";
//设定行头的单元格的tooltip内容
datagridView1.Rows[0].headercell.tooltiptext="该行单元格内容不能修改";
2)celltooltiptextneeded事件
在批量的单元格的tooltip设定的时候,一个一个指定那么设定的效率比较低,这时候可以利用celltooltiptextneeded事件。
当单元格的tooltiptext变化的时候也会引发该事件。
但是,当datagridView的datasource被指定且Virualmode=true的时候,该事件不会被引发。
//celltooltiptextneeded事件处理方法
privatevoiddatagridView1_celltooltiptextneeded(objectsender,
datagridViewcelltooltiptextneededeventargse)
{
e.tooltiptext=e.columnindex.tostring()+","+e.Rowindex.tostring();}
*******datagridView的单元格的边框、网格线样式的设定
1)datagridView的边框线样式的设定
datagridView的边框线的样式是通过datagridView.borderstyle属性来设定的。
borderstyle属性设定值是一个
borderstyle枚举:
Fixedsingle(单线,默认)、Fixed3d、none。
2)单元格的边框线样式的设定
单元格的边框线的样式是通过datagridView.cellborderstyle属性来设定的。
cellborderstyle属性设定值是
datagridViewcellborderstyle枚举。
(详细参见msdn)
另外,通过datagridView.columnheadersborderstyle和Rowheadersborderstyle属性可以修改datagridView的头部的单元格边框线样式。
属性设定值是
datagridViewheaderborderstyle枚举。
(详细参见msdn)
3)单元格的边框颜色的设定
单元格的边框线的颜色可以通过datagridView.gridcolor属性来设定的。
默认是
controldarkdark。
但是只有在cellborderstyle被设定为single、singlehorizontal、singleVertical的条件下才能改变其边框线的颜色。
同样,columnheadersborderstyle以及Rowheadersborderstyle只有在被设定为single时,才能改变颜色。
4)单元格的上下左右的边框线式样的单独设定
cellborderstyle只能设定单元格全部边框线的式样。
要单独改变单元格某一边边框式样的话,需要用到datagridView.advancedcellborderstyle属性。
如示例:
单元格的上边和左边线设为二重线
单元格的下边和右边线设为单重线
datagridView1.advancedcellborderstyle.top=_
datagridViewadvancedcellborderstyle.insetdouble
datagridView1.advancedcellborderstyle.Right=_
datagridViewadvancedcellborderstyle.inset
datagridView1.advancedcellborderstyle.bottom=_
datagridViewadvancedcellborderstyle.inset
datagridView1.advancedcellborderstyle.left=_
datagridViewadvancedcellborderstyle.insetdouble
同样,设定行头单元格的属性是:
advancedRowheadersborderstyle,设定列头单元格属性是:
advancedcolumnheadersborderstyle。
*******datagridView单元格表示值的自定义
通过cellFormatting事件,可以自定义单元格的表示值。
(比如:
值为error的时候,单元格被设定为红色)
下面的示例:
将“colmn1”列的值改为大写。
//cellFormatting事件处理方法
privatevoiddatagridView1_cellFormatting(objectsender,
datagridViewcellFormattingeventargse)
{
datagri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- datagridview 表格 单元格
![提示](https://static.bdocx.com/images/bang_tan.gif)