MyGridControl

概述

MyGridControl是继承dev的GridControl,是GridControl的一个扩展控件。提供了一些非常简便的方法,使得开发非常方便。以后右键功能等也会添加上去。

和DockBar等联动

当选中行改变的时候我们大多需要和DockBar关联,会增加一个选择改变事件,调用一个公共方法去联动DockBar。现在这部分代码不用写了,MyGridControl会自动帮你完成这部分工作,另外和扫描控件会有联动,这部分也不用写。目前还没有支持,主要是扫描控件我要重新规划一下。

            GCDaiDengJWF.RelationDockBar = true;

增加CheckColumn

许多界面需要用到CheckColumn,自己手工加又使得每张界面多了几十行代码,而且效率也不高。使用MyGridControl控件只要将HasCheckColumn设置成True就可以了。如果需要单选还需增加IsRadio为true。

            GCDaiDengJWF.RelationDockBar = true;
            GCDaiDengJWF.Main = (FrmMain)this.MdiParent;

需要获得选中信息可用GetCheckInfo和GetKey方法。前面一个获取所有选中行,后面一个根据主键得到一个逗号分割的字符串。

CheckAll、InverseAll等提供全选反选功能

如果某些特殊的行不想被选中,可在列中通过ChkReadOnly实现

create or replace view bw_fuhedj_view as
select a.s_kehuid, --客户编号
       a.s_cid, --账号
       a.s_ch, --册本号
       a.s_hm,--户名
       a.s_dz, --地址
       b.s_koujingmc as i_koujin, --口径
       COMMON_GetWordsContent(216, a.S_SHUIBIAOFL) AS S_SHUIBIAOFL, --表分类
       COMMON_GetWordsContent(212, 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事件

            GvDaiChuLiZX.ChkStateChanged += new UserControl.MyGridView.CheckBoxStateChanged(GvDaiChuLiZX_ChkStateChanged);

ImageList

对于Image列,手动绑定比较麻烦,只要在查询中加上ImageColumn就可以自动实现该功能。默认image支持0、1、2、3四种值,分别对应绿、蓝、橙、红四种图标。如果有特殊要求,也可以通过ImageList集合进行设置,设置后会覆盖原来的集合。

            img.Add(new UserControl.MyGridControl.ImageInfo { ImageName = "GridShow4.jpg", ImageValue = -1 });
            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的参数。

        public static DataTable FenYeTest() 
        {
            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.LeiXing = "FuHeLC";
            uploadControl1.Init(this);
            uploadControl1.UpdateSysUploadImmediately = false;
            this.GCDaiDengJWF.UploadControl = uploadControl1;
原文地址:https://www.cnblogs.com/zyizyizyi/p/2535547.html