MyGridControl
概述
MyGridControl是继承dev的GridControl,是GridControl的一个扩展控件。提供了一些非常简便的方法,使得开发非常方便。以后右键功能等也会添加上去。
和DockBar等联动
当选中行改变的时候我们大多需要和DockBar关联,会增加一个选择改变事件,调用一个公共方法去联动DockBar。现在这部分代码不用写了,MyGridControl会自动帮你完成这部分工作,另外和扫描控件会有联动,这部分也不用写。目前还没有支持,主要是扫描控件我要重新规划一下。
增加CheckColumn
许多界面需要用到CheckColumn,自己手工加又使得每张界面多了几十行代码,而且效率也不高。使用MyGridControl控件只要将HasCheckColumn设置成True就可以了。如果需要单选还需增加IsRadio为true。
GCDaiDengJWF.Main = (FrmMain)this.MdiParent;
需要获得选中信息可用GetCheckInfo和GetKey方法。前面一个获取所有选中行,后面一个根据主键得到一个逗号分割的字符串。
CheckAll、InverseAll等提供全选反选功能
如果某些特殊的行不想被选中,可在列中通过ChkReadOnly实现
select a.s_kehuid, --客户编号
a.s_cid, --账号
a.s_ch, --册本号
a.s_hm,--户名
a.s_dz, --地址
b.s_koujingmc as i_koujin, --口径
COMMON_GetWordsContent(2, 16, a.S_SHUIBIAOFL) AS S_SHUIBIAOFL, --表分类
COMMON_GetWordsContent(2, 12, a.S_BIAOXINGID) AS S_BIAOXINGID, --表型号
a.s_shuibiaotxm, --表型码
a.S_SHUIBIAOGYH, --表号
a.s_st,--站点
1 as ChkReadOnly
from kg_biaokaxx a
left join cy_shuibiaokj b on b.s_koujingbh =a.s_koujingbh
where not exists
(select s_cid from bw_gongdan gd where gd.i_gongdanlx = 1 and gd.i_gongdanzt < 6 and gd.i_gongdanzt >0 and a.s_cid = gd.s_cid)
and a.i_biaokazt =0;
如果该列需要添加事件可使用ChkStateChanged事件
ImageList
对于Image列,手动绑定比较麻烦,只要在查询中加上ImageColumn就可以自动实现该功能。默认image支持0、1、2、3四种值,分别对应绿、蓝、橙、红四种图标。如果有特殊要求,也可以通过ImageList集合进行设置,设置后会覆盖原来的集合。
img.Add(new UserControl.MyGridControl.ImageInfo { ImageName = "GridShow3.jpg", ImageValue = 1 });
GvbiaokaOut.ImageList = img;
数据绑定增加
一直觉得GridControl对自动绑定做的不是很好,导致我们现在都要先将需要的列加入到grid中,然后才能绑定。否则界面很难看,绑定的列名都是英文,大小也没法控制。现在增加了一个ColumnInitInfoCollection,是一个List。界面加载时传入,这样就不用一个个编辑列了。好处主要是可以自动绑定datatable,当后台逻辑发生变化时,我们还是不需要动界面代码。比如S_CID列变成S_ID了,但是我们界面不用变。还是老样子。实践发现这个功能有利有弊,如果因为一些特殊情况(比如增加多个checkbox或image等到grid中),这时ColumnInitInfoCollection就不用设置了,还是用以前在设计界面添加列的方式。
对无效列的自动检测
数据表自段修改时,不知道哪张界面会出问题,而且有问题GridControl也不会抛错,只是显示成空列。这里增加了自动检测功能,如果不匹配则throw异常,这样一下就能发现了。当然对性能有些影响,只在bebug模式有效。
分页
支持大数据量的分页功能,当数据量过大时,grid会自动启用分页,该分页是重写了原分页的功能。目前支持dto的分页和存储过程的分页。当使用dto分页时可以不用考虑具体的分页实现细节,grid控件会帮你实现所有功能。当使用存储过程分页时,存储过程需有count、pageSize、pageIndex的参数。
{
int pageSize = 20;
int pageIndex = 0;
OracleParameter[] storedParams;
storedParams = OracleHelperParameterCache.GetSpParameterSet(Platform.Configuration.ConfigHelper.BusinessConnString, "COMMON_BIAOKATEST");
storedParams[0].Value = "000000";
storedParams[1].Value = pageSize;
storedParams[2].Value = pageIndex;
DataSet ds = new DataSet();
ds = OracleHelper.ExecuteDataset(Platform.Configuration.ConfigHelper.BusinessConnString, CommandType.StoredProcedure, "COMMON_BIAOKATEST", storedParams);
int? count = storedParams[3].Value is System.DBNull ? default(int?) : Convert.ToInt32(storedParams[3].Value);
DataTable dt = ds.Tables[0];
dt.ExtendedProperties.Add("sql", "COMMON_BiaoKaTest");
dt.ExtendedProperties.Add("count", count);
dt.ExtendedProperties.Add("pageSize", pageSize);
dt.ExtendedProperties.Add("pageIndex", pageIndex);
//计算总页数
int totalPageNum = (count.Value + pageSize - 1) / pageSize;
dt.ExtendedProperties.Add("totalPageNum", totalPageNum);
DBParameter[] db = ConvertOracleToDB(storedParams);
dt.ExtendedProperties.Add("dbParameter", SerializeHelper.Serialize(db));
return dt;
}
上传控件联动
上传控件可能和grid有联动关系,grid会自动显示隐藏上传控件。
uploadControl1.Init(this);
uploadControl1.UpdateSysUploadImmediately = false;
this.GCDaiDengJWF.UploadControl = uploadControl1;