[转载]DevExpress GridControl 使用方法技巧 总结 收录整理
最近开始用devexpress组件,发现很好的经验总结博客,在这里转载分享
原作者:https://www.cnblogs.com/wordgao/p/4517011.html
一、如何解决单击记录整行选中的问题
view->optionsbehavior->editorshowmode 设置为:click
二、如何新增一条记录
(1)、gridview.addnewrow()
(2)、实现gridview_initnewrow事件
三、如何解决gridcontrol记录能获取而没有显示出来的问题
gridview.populatecolumns();
四、如何让行只能选择而不能编辑(或编辑某一单元格)
(1)、view->optionsbehavior->editorshowmode 设置为:click
(2)、view->optionsbehavior->editable 设置为:false
五、如何禁用gridcontrol中单击列弹出右键菜单
设置run design->optionsmenu->enablecolumnmenu 设置为:false
1、gridcontrol如何去掉主面板?
鼠标右键run designer=》optionsview =》 showgrouppanel=false;
2、gridcontrol如何设置列自动宽度?
鼠标右键run designer=》optionsview=》columnautowidth=true;
3、gridcontrol如何设置单元格不可编辑?
鼠标右键run designer=》optionsbehavior 》editable=false;
4.修改最上面的grouppanel内容
gridview1.grouppaneltext=”盼盼”;
获得选中了多少行?
1、 如何解决单击记录整行选中的问题
view->optionsbehavior->editorshowmode 设置为:click
2、 如何新增一条记录
(1)、gridview.addnewrow()
(2)、实现 gridview_initnewrow 事件
3、如何解决 gridcontrol 记录能获取而没有显示出来的问题
gridview.populatecolumns();
4、如何让行只能选择而不能编辑(或编辑某一单元格)
(1)、view->optionsbehavior->editorshowmode 设置为:click
(2)、view->optionsbehavior->editable 设置为:false
5、如何禁用 gridcontrol 中单击列弹出右键菜单
设置 run design->optionsmenu->enablecolumnmenu 设置为:false
6、如何隐藏 gridcontrol 的 grouppanel 表头
设置 run design->optionsview->showgrouppanel 设置为:false
7、如何禁用 gridcontrol 中列头的过滤器 过滤器如下图所示:
设置 run design->optionscustomization->allowfilter 设置为:false
8、如何在查询得到 0 条记录时显示自定义的字符提示/显示 如图所示:
方法如下:
//when no records are being displaye
private void gridview1_customdrawemptyforeground(object sender, customdraweventargs e)
{
//方法一(此方法为gridview设置了数据源绑定时,可用)
columnview columnview = sender as columnview;
bindingsource bindingsource = this.gridview1.datasource as bindingsource;
if(bindingsource.count == 0)
{
string str = "没有查询到你所想要的数据!";
font f = new font("宋体", 10, fontstyle.bold);
rectangle r = new rectangle(e.bounds.top + 5, e.bounds.left + 5, e.bounds.right - 5, e.bounds.height - 5);
e.graphics.drawstring(str, f, brushes.black, r); }
//方法二(此方法为gridview没有设置数据源绑定时,使用,一般使用此种方 法)
if (this._flag)
{ if (this.gridview1.rowcount == 0)
{ string str = "没有查询到你所想要的数据!"; font f = new font("宋体", 10, fontstyle.bold);
rectangle r = new rectangle(e.bounds.left + 5, e.bounds.top + 5, e.bounds.width - 5, e.bounds.height - 5);
e.graphics.drawstring(str, f, brushes.black, r); } } }
六、如何隐藏gridcontrol的grouppanel表头
设置run design->optionsview->showgrouppanel 设置为:false
七、如何禁用gridcontrol中列头的过滤器
过滤器如下图所示:
devexpress gridcontrol使用方法总结
设置 run design->optionscustomization->allowfilter 设置为:false
八、如何在查询得到0条记录时显示自定义的字符提示/显示
如图所示:
devexpress gridcontrol使用方法总结
方法如下:
//when no records are being displayed
private void gridview1_customdrawemptyforeground(object sender, customdraweventargs e)
{
//方法一(此方法为gridview设置了数据源绑定时,可用)
columnview columnview = sender as columnview;
bindingsource bindingsource = this.gridview1.datasource as bindingsource;
if(bindingsource.count == 0)
{
string str = "没有查询到你所想要的数据!";
font f = new font("宋体", 10, fontstyle.bold);
rectangle r = new rectangle(e.bounds.top + 5, e.bounds.left + 5, e.bounds.right - 5, e.bounds.height - 5);
e.graphics.drawstring(str, f, brushes.black, r);
}
//方法二(此方法为gridview没有设置数据源绑定时,使用,一般使用此种方法)
if (this._flag)
{
if (this.gridview1.rowcount == 0)
{
string str = "没有查询到你所想要的数据!";
font f = new font("宋体", 10, fontstyle.bold);
rectangle r = new rectangle(e.bounds.left + 5, e.bounds.top + 5, e.bounds.width - 5, e.bounds.height - 5);
e.graphics.drawstring(str, f, brushes.black, r);
}
}
}
九、如何显示水平滚动条?
设置this.gridview.optionsview.columnautowidth = false;
十、如何定位到第一条数据/记录?
设置 this.gridview.movefirst()
十一、如何定位到下一条数据/记录?
设置 this.gridview.movenext()
十二、如何定位到最后一条数据/记录?
设置 this.gridview.movelast()
十三、设置成一次选择一行,并且不能被编辑
this.gridview1.focusrectstyle = devexpress.xtragrid.views.grid.drawfocusrectstyle.rowfocus;
this.gridview1.optionsbehavior.editable = false;
this.gridview1.optionsselection.enableappearancefocusedcell = false;
十四、如何显示行号?
this.gridview1.indicatorwidth = 40;
//显示行的序号
private void gridview1_customdrawrowindicator(object sender, rowindicatorcustomdraweventargs e)
{
if (e.info.isrowindicator && e.rowhandle>=0)
{
e.info.displaytext = (e.rowhandle + 1).tostring();
}
}
十五、如何让各列头禁止移动?
设置gridview1.optionscustomization.allowcolumnmoving = false;
十六、如何让各列头禁止排序?
设置gridview1.optionscustomization.allowsort = false;
十七、如何禁止各列头改变列宽?
设置gridview1.optionscustomization.allowcolumnresizing = false;
normal 0 7.8 磅 0 2 false false false en-us zh-cn x-none
dev控件:gridcontrol常用属性设置
1.隐藏最上面的grouppanel
gridview1.optionsview.showgrouppanel=false;
2.得到当前选定记录某字段的值
svalue=table.rows[gridview1.focusedrowhandle][fieldname].tostring();
3.数据只读
gridview1.optionsbehavior.editable=false;
4.不显示masterdetailview
gridview1.optionsdetail.enablemasterviewmode=false;
5.修改最上面的grouppanel内容
gridview1.grouppaneltext="电子灵魂";
6.设置数据源:
gridcontrol1.datasource = dt;
绑定每一列的filedname--属性
对于oracle数据库,所有的在设计器里写的程序中的字段名必须大写,否则可能绑定不上字段,sqlserver没有这个限制.
7.读写拷贝权限设置
只读不可拷贝:
columnviewoptionsbehavior.editable = false
只读可拷贝:
columnviewoptionsbehavior.editable = true
optionscolumn.allowedit = true
optionscolumn.readonly = true
可编辑:
columnviewoptionsbehavior.editable = true
optionscolumn.allowedit = true
optionscolumn.readonly = false
8.模板列的设置:
到columns中,在他的属性中找到columnedit.
以lookupedit为例:
首先从designer左边菜单in-placeeditor repository中添加lookupedit.取名为re1.然后.在他的columns属性中添加3列.caption依次为:编号,姓名,性别.fieldname依次为:fid,fname,fsex.然后将re1的nulltext设置成空.
autosearchcolumnindex属性设置为2.immediatepopup属性设置为true.
searchmode设置为onlyinpopup.
然后将这个模板列附加到我们上面提到的列1(也就是将列1的columnedit属性设成re1)
最后我们还要在代码里面给re1绑定数据源和显示项.
re1.datasource =daluse.query("select fid,fname,fsex from dual").tables[0];
re1.displaymember ="fsex";
re1.valuemember ="fname";
9.设某一列文字和标题局中显示
gridview1.columns[0].appearanceheader.textoptions.halignment =devexpress.utils.horzalignment.center;
gridview1.columns[0].appearancecell.textoptions.halignment =devexpress.utils.horzalignment.center;
10.去掉某一列上面的自动筛选功能(filter)
gridview1.columns[0].optionsfilter.allowautofilter = false;
gridview1.columns[0].optionsfilter.allowfilter =false;
gridview1.columns[0].optionsfilter.immediateupdateautofilter =false;
11.设置冻结列(左冻结)
gridview1.columns[0].fixed= devexpress.xtragrid.columns.fixedstyle.left;
12.得到单元格数据(0行0列)
string ss=gridview1.getrowcelldisplaytext(0,gridview1.columns[0]);
string ss = gridview1.getrowcellvalue(0, gridview1.columns[0]);
13.设置单元格数据(将0行0列的单元格赋值123)
gridview1.setrowcellvalue(0, gridview1.columns[0],"123");
13.手动添加dev的列
devexpress.xtragrid.columns.gridcolumn col1=newdevexpress.xtragrid.columns.gridcolumn ();
col1.fieldname="fid";
col1.visible=true;
col1.visibleindex=gridview1.columns.count;
gridview1.columns.add(col1);
14.设置自动增加的行号,需要先添加给gridview添加事件customdrawrowindicator
private void gridview_customdrawrowindicator(objectsender,devexpress.xtragrid.views.grid.rowindicatorcustomdraweventargs e)
{
if (e.info.isrowindicator &&e.rowhandle >= 0)
e.info.displaytext = (e.rowhandle + 1).tostring();
}
15.删除: (修改了dgvdel里的datagridviewdel方法)
public static voiddatagridviewdel_dev(devexpress.xtragrid.views.grid.gridview mydgv)
{
if (messagebox.show("你确定要删除选中的记录吗?", "删除提示",messageboxbuttons.yesno, messageboxicon.warning, messageboxdefaultbutton.button2, 0, false) == dialogresult.yes)
{
intiselectrowcount = mydgv.selectedrowscount;
if(iselectrowcount > 0)
{
mydgv.deleteselectedrows();
}
}
}
16. 新增: (对于新增,其本身的addnewrow方法就可以做到)
private void btn_add_click(object sender, eventargs e)
{
gridview1.addnewrow();
}
具体如果对于新加行还有什么特别的设置,可以在它gridview1_initnewrow事件中填写:
private void gridview1_initnewrow(object sender,devexpress.xtragrid.views.grid.initnewroweventargs e)
{
columnview view = sender as columnview;
view.setrowcellvalue(e.rowhandle,view.columns[0],gridview1.getrowcellvalue(gridview1.getrowhandle(gridview1.rowcount - 2),gridview1.columns[0])); //复制最后一行的数据到新行
view.setrowcellvalue(e.rowhandle, view.columns[1],gridview1.getrowcellvalue(gridview1.getrowhandle(gridview1.rowcount - 2),gridview1.columns[1])); //复制最后一行的数据到新行
}
17. 保存 (第三方控件提供的refreshdata和refreshdatasource方法对于保存数据都不好使,最后还是使用了dgvsave的datagridviewsave方法,用这个方法就可以)
18.特效:gridcontrol中有5种view 型式,普通的是gridview,然后分别为cardview、bandedview、advancedbandedview、layoutview;共5种。
1)、view组中把optionview下的viewmode 设置成“carousel”就达到这种“旋转木马”式的gridcontrolview 特效了
2)、layoutview1.optionscarouselmode.pitchangle 这个属性决定“旋转木马”的pitch angle 螺距角; 螺旋角; 螺旋升角; 俯仰角; 倾角; 节锥半角
3)、roll angle 属性决定着 倾侧角度
4)、指定数据源,显示数据:
//显示数据
private voidshowdata(list<employee > list)
{
datatable dt= new datatable("oneemployee");
dt.columns.add("caption", system.type.gettype("system.string"));
dt.columns.add("department",system.type.gettype("system.string"));
dt.columns.add("photoname",system.type.gettype("system.byte[]"));
for(int i = 0; i < list.count; i++)
{
datarow dr = dt.newrow();
dr["caption"] = list[i].name;
dr["department"] = list[i].department;
string imagepath = @"d:\c#\photos\" + list[i].photopath;
dr["photoname"] = getimagebyte(imagepath);
dt.rows.add(dr);
}
gridcontrol1.datasource = dt;
}
//返回图片的字节流byte[]
private byte[] getimagebyte(stringimagepath)
{
filestreamfiles = new filestream(imagepath, filemode.open);
byte[]imgbyte = new byte [files.length ];
files.read(imgbyte, 0, imgbyte.length);
files.close();
returnimgbyte;
}
19.检查数据的有效性
在gridview的validaterow事件中加入检查代码:
#region 检查数据
private void gridview1_validaterow(object sender, validateroweventargse)
{
gridview view = sender as gridview;
view.clearcolumnerrors();
if (view.getrowcellvalue(e.rowhandle, "receivedate") ==dbnull.value)
{
e.valid = false;
view.setcolumnerror(view.columns["receivedate"], "必须指定日期");
}
}
#endregion
调用gridview.updatecurrentrow()方法执行检查
最常用的devexpress winform 4个代码片段:
一 、gridcontrol的删除操作
private void rilinkeditinfodel_click(object sender, eventargs e)
{
if (xtramessagebox.show("请确定是否删除当前记录?", "警告",messageboxbuttons.yesno, messageboxicon.warning) == dialogresult.yes)
{
datarow row =gvinfos.getdatarow(gvinfos.focusedrowhandle);
delbycode(row["code"].tostring());
xtramessagebox.show("操作成功!");
}
}
二、绑定非数据表中列
hashtable ht = new hashtable();
private void gridview6_customunboundcolumndata(object sender, devexpress.xtragrid.views.base.customcolumndataeventargse)
{
gridview view = sender as gridview;
if (e.rowhandle >= 0)
{
object needalert =view.getrowcellvalue(e.rowhandle, view.columns["needalert"]);
if (needalert != null &needalert != dbnull.value && needalert.tostring().trim() !="0" & view.getrowcellvalue(e.rowhandle,view.columns["value"]) != dbnull.value)
{
decimal avervalue = convert.todecimal(view.getrowcellvalue(e.rowhandle,view.columns["value"]));
objectminvalue = view.getrowcellvalue(e.rowhandle,view.columns["minvalue"]);
objectmaxvlaue = view.getrowcellvalue(e.rowhandle,view.columns["maxvalue"]);
if(minvalue != dbnull.value & minvalue != null & maxvlaue.tostring() !="" & maxvlaue != dbnull.value && maxvlaue != null &maxvlaue.tostring() != "")
{
decimal gridcolumn2 = convert.todecimal(view.getrowcellvalue(e.rowhandle,view.columns["minvalue"]));
decimal gridcolumn1 = convert.todecimal(view.getrowcellvalue(e.rowhandle,view.columns["maxvalue"]));
if (gridcolumn2 > avervalue || avervalue > gridcolumn1)
{
if (!ht.containskey("pic"))
ht.add("pic", getimage(1));
e.value = ht["pic"];
}
}
}
}
}
/// <summary>
/// 由资源文件获取图片
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
byte[] getimage(int key)
{
image img =devexpress.utils.controls.imagehelper.createimagefromresources(string.format("riversys.resources.{0}.gif",key.tostring()), typeof(riverinfos).assembly);
returndevexpress.xtraeditors.controls.byteimageconverter.tobytearray(img,imageformat.gif);
}
/// <summary>
/// 动态根据条件设置行样式
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridview6_rowstyle(object sender,devexpress.xtragrid.views.grid.rowstyleeventargs e)
{
gridview view = sender as gridview;
if (e.rowhandle >= 0)
{
object needalert =view.getrowcellvalue(e.rowhandle, view.columns["needalert"]);
if (needalert != null &needalert != dbnull.value && needalert.tostring().trim() !="0" & view.getrowcellvalue(e.rowhandle,view.columns["value"]) != dbnull.value)
{
decimal avervalue = convert.todecimal(view.getrowcellvalue(e.rowhandle, view.columns["value"]));
objectminvalue = view.getrowcellvalue(e.rowhandle,view.columns["minvalue"]);
objectmaxvlaue = view.getrowcellvalue(e.rowhandle,view.columns["maxvalue"]);
if(minvalue != dbnull.value & minvalue != null & maxvlaue.tostring() !="" & maxvlaue != dbnull.value && maxvlaue != null &maxvlaue.tostring() != "")
{
decimal gridcolumn2 = convert.todecimal(minvalue);
decimal gridcolumn1 = convert.todecimal(maxvlaue);
if (gridcolumn2 > avervalue || avervalue > gridcolumn1)
{
e.appearance.forecolor = color.red;
e.appearance.backcolor = color.lightgray;
}
}
}
}
}
三、gridcontrol 中颜色选择控件
private void gvmapcolor_customunboundcolumndata(object sender,devexpress.xtragrid.views.base.customcolumndataeventargs e)
{
gridview view = sender as gridview;
dataview dv = view.datasource as dataview;
if (e.isgetdata)
{
string strval =dv[e.listsourcerowindex]["color"].tostring();
if (strval != "")
{
//e.value = devexpress.utils.stylelayout.colorfromstring(strval);
e.value = common.hextocolor(strval);
}
}
else
{
//color colorval =devexpress.utils.stylelayout.colorfromstring(e.value.tostring());
color colorval =(color)e.value;
dv[e.listsourcerowindex]["color"] =common.rgb_hex(colorval.toargb());
}
}
四、关于 gridcontrol 验证示例
/**//// <summary>
/// 初始化gridview,绑定数据
/// </summary>
/// <param name="parentid"></param>
private void gridviewbinddata(string parentid)
{
this.gridview1.columns.clear();
this.fds= areasetupactionhelper.getdsregionbyparentid(parentid);
this.gridcarea.datasource =this.fds.tables[0].defaultview;
this.gridview1.columns["id"].visibleindex =-1;
this.gridview1.columns["childcounts"].visibleindex= -1;
this.gridview1.columns["reg_id"].caption ="区划编号";
this.gridview1.columns["reg_name"].caption ="区划名称";
this.gridview1.columns["parent_id"].caption ="父区划编号";
this.gridview1.columns["reg_desc"].caption ="区划描述";
this.gridview1.columns["parent_id"].imageindex =1;
this.gridview1.columns["reg_desc"].imageindex = 0;
repositoryitemtextedit texteditreg_id = newrepositoryitemtextedit();
texteditreg_id.mask.editmask =parentid+"\\d{2,3}";
texteditreg_id.mask.masktype =devexpress.xtraeditors.mask.masktype.regular;
this.gridview1.columns["reg_id"].columnedit =texteditreg_id;
this.gridview1.columns["reg_desc"].columnedit= new repositoryitemmemoexedit();
treelistnode node =this.treelarea.focusednode.parentnode;
string fid =node==null?"0":node.getvalue("regid").tostring().trim();
dataset ds =areasetupactionhelper.getdsregionbyparentid(fid);
repositoryitemlookupedit lookueparent_id = newrepositoryitemlookupedit();
lookueparent_id.columns.add(newlookupcolumninfo("reg_id", 40, "区划编号"));
lookueparent_id.columns.add(newlookupcolumninfo("reg_name", 40, "区划名称"));
lookueparent_id.datasource = ds.tables[0].defaultview;
lookueparent_id.valuemember = "reg_id";
lookueparent_id.displaymember = "reg_id";
this.gridview1.columns["parent_id"].columnedit =lookueparent_id;
}
/**//// <summary>
/// gridview单元格验证的相关处理程序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridview1_validatingeditor(objectsender, devexpress.xtraeditors.controls.basecontainervalidateeditoreventargs e)
{
if (e.valid == false&this.gridview1.focusedcolumn.fieldname =="reg_id")
{
e.errortext = "区划编号不合法!\n应为父区划编号加2~3位数据组成!";
}
if (this.gridview1.focusedcolumn.fieldname =="reg_name")
{
regex reg=new regex(@"[\u4e00-\u9fa5]{1,20}");
match m=reg.match(e.value.tostring().trim());
if (m.length != e.value.tostring().trim().length)
{
e.valid = false;
e.errortext = "区划名称应为汉字\n长度为1至20";
}
}
}
private void gridview1_invalidvalueexception(objectsender, invalidvalueexceptioneventargs e)
{
if (mydialog.alert(" 您所填写的内容不符合规则\n 要放弃您刚才对此项所做的更改吗?", "您所编辑的内容不符合规则", messageboxbuttons.yesno, messageboxicon.warning) ==dialogresult.yes)
{
e.exceptionmode = exceptionmode.ignore;
}
}
/**//// <summary>
/// gridview行验证的相关处理程序
/// </summary>
private void gridview1_validaterow(objectsender, devexpress.xtragrid.views.base.validateroweventargs e)
{
string regid = this.gridview1.getrowcellvalue(e.rowhandle,"reg_id").tostring().trim();
string regname = this.gridview1.getrowcellvalue(e.rowhandle,"reg_name").tostring().trim();
if ( regid.length < 1)
{
e.valid = false;
this.gridview1.setcolumnerror(this.gridview1.columns["reg_id"],"请填写区划编号!",devexpress.xtraeditors.dxerrorprovider.errortype.default);
// e.errortext = "区划名称不能为空!";
}
if (regname.length < 1)
{
e.valid = false;
this.gridview1.setcolumnerror(this.gridview1.columns["reg_name"],"区划名称不能为空!",devexpress.xtraeditors.dxerrorprovider.errortype.default);
}
}
private void gridview1_invalidrowexception(object sender,devexpress.xtragrid.views.base.invalidrowexceptioneventargs e)
{
if (e.rowhandle >= 0)
{
if (this.gridview1.getrowcellvalue(e.rowhandle,this.gridview1.columns["reg_id"]).tostring().trim() == ""|| this.gridview1.getrowcellvalue(e.rowhandle,this.gridview1.columns["reg_name"]).tostring().trim() =="")
{
if (mydialog.alert(" 您所填写的内容不符合规则\n 要放弃您刚才对此项所做的更改吗?","您所编辑的内容不符合规则", messageboxbuttons.yesno,messageboxicon.warning) == dialogresult.yes)
{
e.exceptionmode = exceptionmode.ignore;
}
else
{
e.exceptionmode = exceptionmode.noaction;
}
}
}
else
{
e.exceptionmode = exceptionmode.ignore;
}
}
view plaincopy to clipboardprint?
//获取焦点行任意单元格的数据
columnview cv = (columnview)gridcontrol_gongzi.focusedview;//重新获取此id 否则无法从表头连删获取不到id
int focusedhandle = cv.focusedrowhandle;
object rowidobj = gridview1.getrowcellvalue(focusedhandle,"id");
if (dbnull.value != rowidobj)
{
focusedrow_id = convert.toint32(rowidobj);
}
//获取焦点行任意单元格的数据
columnview cv = (columnview)gridcontrol_gongzi.focusedview;//重新获取此id 否则无法从表头连删获取不到id
int focusedhandle = cv.focusedrowhandle;
object rowidobj = gridview1.getrowcellvalue(focusedhandle, "id");
if (dbnull.value != rowidobj)
{
focusedrow_id = convert.toint32(rowidobj);
}
view plaincopy to clipboardprint?
//当数据发生变化时执行
private void gridview1_cellvaluechanged(object sender,cellvaluechangedeventargs e)
{
int introwhandle =e.rowhandle;
focusedrow_bumen =convert.tostring(gridview1.getrowcellvalue(introwhandle,"bumen"));
focusedrow_xingming =convert.tostring(gridview1.getrowcellvalue(introwhandle,"xingming"));
//focusedrow_jibengongzi =convert.todecimal(gridview1.getrowcellvalue(introwhandle,"jibengongzi"));
object rowjibengongziobj =gridview1.getrowcellvalue(introwhandle, "jibengongzi");
if (dbnull.value !=rowjibengongziobj)
{
focusedrow_jibengongzi = convert.todecimal(rowjibengongziobj);
}
}
//当数据发生变化时执行
private voidgridview1_cellvaluechanged(object sender, cellvaluechangedeventargs e)
{
int introwhandle= e.rowhandle;
focusedrow_bumen = convert.tostring(gridview1.getrowcellvalue(introwhandle,"bumen"));
focusedrow_xingming = convert.tostring(gridview1.getrowcellvalue(introwhandle,"xingming"));
//focusedrow_jibengongzi =convert.todecimal(gridview1.getrowcellvalue(introwhandle,"jibengongzi"));
objectrowjibengongziobj = gridview1.getrowcellvalue(introwhandle,"jibengongzi");
if(dbnull.value != rowjibengongziobj)
{
focusedrow_jibengongzi = convert.todecimal(rowjibengongziobj);
}
} view plaincopy toclipboardprint?
//设置焦点行的焦点单元格的位置
columnview view = (columnview)gridcontrol_gongzi.focusedview;
view.focusedcolumn = view.columns["bumen"];
//设置焦点行的焦点单元格的位置
columnview view = (columnview)gridcontrol_gongzi.focusedview;
view.focusedcolumn = view.columns["bumen"]; view plaincopy toclipboardprint?
//当焦点行发生改变时执行 获取选中焦点行id
private void gridview1_focusedrowchanged(object sender, devexpress.xtragrid.views.base.focusedrowchangedeventargse)
{
int introwhandle =e.focusedrowhandle;
object rowidobj =gridview1.getrowcellvalue(introwhandle, "id");
if (dbnull.value!= rowidobj)//做个判断否则获取不到id后报错
{
focusedrow_id = convert.toint32(rowidobj);
}
}
//当焦点行发生改变时执行 获取选中焦点行id
private void gridview1_focusedrowchanged(object sender,devexpress.xtragrid.views.base.focusedrowchangedeventargs e)
{
intintrowhandle = e.focusedrowhandle;
objectrowidobj = gridview1.getrowcellvalue(introwhandle, "id");
if(dbnull.value != rowidobj)//做个判断否则获取不到id后报错
{
focusedrow_id = convert.toint32(rowidobj);
}
}
view plaincopy to clipboardprint?
//焦点行的focusedhandle为:
focuserow_handle = -999998;
//获取焦点行的handle
columnview newview = (columnview)gridcontrol_gongzi.focusedview;
focuserow_handle = newview.focusedrowhandle;
//回车添加新行
private void gridview1_keypress(object sender, keypresseventargse)
{
if(e.keychar == 13)
{
columnview view = (columnview)gridcontrol_gongzi.focusedview;
if(view.islastrow)
{
if (focuserow_handle == 0)
{
gridview1.addnewrow();
columnview newview = (columnview)gridcontrol_gongzi.focusedview;
newview.focusedcolumn = newview.columns["bumen"];//定位焦点网格的位置
focuserow_handle = newview.focusedrowhandle;//获取新焦点行的focuserowhandle并初始化全局变量focuserow_handle供保存操作时判断是update还是insert
9、如何显示水平滚动条?或
设置 this.gridview.optionsview.columnautowidth = false;
.....列表宽度自适应内容
gridview1.bestfitcolumns();
10、如何定位到第一条数据/记录?
设置 this.gridview.movefirst()
11、如何定位到下一条数据/记录?
设置 this.gridview.movenext()
12、如何定位到最后一条数据/记录?
设置 this.gridview.movelast()
13、设置成一次选择一行,并且不能被编辑
this.gridview1.focusrectstyle = devexpress.xtragrid.views.grid.drawfocusrectstyle.rowfocus;
this.gridview1.optionsbehavior.editable = false;
this.gridview1.optionsselection.enableappearancefocusedcell = false;
14、如何显示行号?
private void gvpaylist_customdrawrowindicator(object sender, devexpress.xtragrid.views.grid.rowindicatorcustomdraweventargs e)
{
e.appearance.textoptions.halignment = devexpress.utils.horzalignment.far;
if (e.info.isrowindicator)
{
if (e.rowhandle >= 0)
{
e.info.displaytext = (e.rowhandle + 1).tostring();
}
else if (e.rowhandle < 0 && e.rowhandle > -1000)
{
e.info.appearance.backcolor = system.drawing.color.antiquewhite;
e.info.displaytext = "g" + e.rowhandle.tostring();
}
}
}
15、如何让各列头禁止移动?
设置 gridview1.optionscustomization.allowcolumnmoving = false;
16、如何让各列头禁止排序?
设置 gridview1.optionscustomization.allowsort = false;
17、如何禁止各列头改变列宽?
设置 gridview1.optionscustomization.allowcolumnresizing = false;
18.拖动滚动条时固定某一列
设置columns,选择要固定的列。设置fixed属性,可以选择:固定在左边、固定在右边、不固定。
19.获取选定行,指定列单元格的内容
return gridview1.getrowcellvalue(prows[0], columname).tostring ();
20.分组显示
optionsview>optionsbehavior>autoexpandallgroups = true
选择要分组的列,将groupindex属性设置为0
21.格式化数据
private void gvlist_validatingeditor(object sender, devexpress.xtraeditors.controls.basecontainervalidateeditoreventargs e)
{
if (this.gvlist.focusedcolumn.fieldname == "passqty")
{
string passqty = e.value.tostring().trim();
int receiveqty = orderdetaillist[this.gvlist.focusedrowhandle].qty;
if (!jxtype.isintbigthanzero(passqty))
{
e.valid = false;
e.errortext = "合格数量必须为大于等于0小于等于接货数量的整数!";
}
else
{
if (int.parse(passqty) > receiveqty)
{
e.valid = false;
e.errortext = "合格数量必须为大于0小于等于接货数量的整数!";
}
}
}
}
22.合并表头
///初始化表格
using devexpress.xtragrid.columns;
using devexpress.xtragrid.views.base;
using devexpress.xtragrid.views.bandedgrid;
using devexpress.xtraeditors.repository;
private void initgrid()
{
// advbandedgridview1是表格上的默认视图,注意这里声明的是:bandedgridview
bandedgridview view = advbandedgridview1 as bandedgridview;
view.beginupdate(); //开始视图的编辑,防止触发其他事件
view.begindataupdate(); //开始数据的编辑
view.bands.clear();
view.optionsview.showcolumnheaders = false; //因为有band列了,所以把columnheader隐藏
//添加列标题
//添加列标题
gridband bandid = view.bands.addband("id");
bandid.visible = false; //隐藏id列
gridband bandname = view.bands.addband("姓名");
gridband bandsex = view.bands.addband("性别");
gridband bandbirth = view.bands.addband("出生日期");
gridband bandscore = view.bands.addband("分数");
gridband bandmath = bandscore.children.addband("数学");
gridband bandchinese = bandscore.children.addband("语文");
gridband bandenglish = bandscore.children.addband("英语");
gridband bandsubtotal = bandscore.children.addband("小计");
gridband bandremark = view.bands.addband("备注");
bandfile.appearanceheader.textoptions.halignment = devexpress.utils.horzalignment.center;//这是合并表头居中显示
view.enddataupdate();//结束数据的编辑
view.endupdate(); //结束视图的编辑
}
具体可看
dev gridcontrol 合并表头
23. //动态添加列
devexpress.xtragrid.columns.gridcolumn col1 = new devexpress.xtragrid.columns.gridcolumn();
col1.fieldname = "name";
col1.caption = "名字";
col1.visible = false;
col1.visibleindex = gvcountry.columns.count;
gvcountry.columns.add(col1);
24。设置自动增加的行号
private void gridview_customdrawrowindicator(object sender,devexpress.xtragrid.views.grid.rowindicatorcustomdraweventargs e)
{
e.appearance.textoptions.halignment = devexpress.utils.horzalignment.far;
if (e.info.isrowindicator)
{
if (e.rowhandle >= 0)
{
e.info.displaytext = (e.rowhandle + 1).tostring();
}
else if (e.rowhandle < 0 && e.rowhandle > -1000)
{
e.info.appearance.backcolor = system.drawing.color.antiquewhite;
e.info.displaytext = "g" + e.rowhandle.tostring();
}
}
}
25.特效:gridcontrol中有5种view 型式,普通的是gridview,然后分别为cardview、bandedview、advanced bandedview、layoutview;共5种。
1)、view组中把optionview下的viewmode 设置成“carousel”就达到这种“旋转木马”式的gridcontrol
view 特效了
2)、layoutview1.optionscarouselmode.pitchangle 这个属性决定“旋转木马”的pitch angle 螺距角; 螺旋角; 螺旋升角; 俯仰角; 倾角; 节锥半角
3)、roll angle 属性决定着 倾侧角度
4)、指定数据源,显示数据:
//显示数据
private void showdata(list<employee > list)
{
datatable dt = new datatable("oneemployee");
dt.columns.add("caption", system.type.gettype("system.string"));
dt.columns.add("department", system.type.gettype("system.string"));
dt.columns.add("photoname", system.type.gettype("system.byte[]"));
for (int i = 0; i < list.count; i++)
{
datarow dr = dt.newrow();
dr["caption"] = list[i].name;
dr["department"] = list[i].department;
string imagepath = @"d:\c#\photos\" + list[i].photopath;
dr["photoname"] = getimagebyte(imagepath);
dt.rows.add(dr);
}
gridcontrol1.datasource = dt;
}
//返回图片的字节流byte[]
private byte[] getimagebyte(string imagepath)
{
filestream files = new filestream(imagepath, filemode.open);
byte[] imgbyte = new byte [files.length ];
files.read(imgbyte, 0, imgbyte.length);
files.close();
return imgbyte;
}
26.检查数据的有效性
在gridview的validaterow事件中加入检查代码:
#region 检查数据
private void gridview1_validaterow(object sender, validateroweventargs e)
{
gridview view = sender as gridview;
view.clearcolumnerrors();
if (view.getrowcellvalue(e.rowhandle, "receivedate") == dbnull.value)
{
e.valid = false;
view.setcolumnerror(view.columns["receivedate"], "必须指定日期");
}
}
27.设某一列文字和标题局中显示
gridview1.columns[0].appearanceheader.textoptions.halignment = devexpress.utils.horzalignment.center;
gridview1.columns[0].appearancecell.textoptions.halignment = devexpress.utils.horzalignment.center;
28.列表过滤条件多选
列名.optionsfilter.filterpopupmode= devexpress.xtragrid.columns.filterpopupmode.checkedlist
29.隔行换色的方法
this.gridview1.appearance.oddrow.backcolor = color.white; // 设置奇数行颜色 // 默认也是白色 可以省略
this.gridview1.optionsview.enableappearanceoddrow = true; // 使能 // 和和上面绑定 同时使用有效
this.gridview1.appearance.evenrow.backcolor = color.whitesmoke; // 设置偶数行颜色
this.gridview1.optionsview.enableappearanceevenrow = true; // 使能 // 和和上面绑定 同时使用有效