在DevExpress程序中利用Winform分页控件直接录入数据并保留

貌似情况下,我们都倾向于选用一个公司相比好的独立界面来录入或者体现相关的数据,那样处理相比较正式,也便于突显相比较复杂的数量。不过在局部情状下,我们也恐怕需求直接在GridView表格上平素录入或者涂改数据,这种对于字段相比少,而且内容绝相比较简单的动静下,功用是相比较高的一种输入方式。本篇小说紧要介绍在DevExpress程序中利用GridView直接录入数据并保留的落实,以及选取Winform分页控件来拓展多少直接录入的已毕操作。

1、在GridView上突显数据

在GridView上显得数据,只需求绑定数据源给对应的GridControl控件即可,相比较容易,可以绑定的数额格式也是众多,可以是DataTable,也可以支撑IEnumerable格式的IList<T>集合对象等等,在我的框架中,倾向于采纳IList<T>那种实体类集合的格局。

在网上半数以上例子,绑定的数据源多数利用的是基于DataTable的措施,那种措施浮现的数码受制于差别数据库的特性,字段可能大小写不等同,而且DevExpress操作行列的字段是高低写敏感的,因而只要你要字段名获取值的时候,传入的字段名一定是要大小写一致,因而在数据库不一致的时候,如Oracle查询到的字段全体是大写的,SQLServer则是鱼目混珠情势的(可以是Pascal,也可以是大写、小写)。

采用实体类集合对于框架层次的操作有无数益处,可以强类型,而且不受具体数据库的震慑,所有交互均经过实体类或者其集合进行拍卖,相对来说有很大的优势。

貌似情况下,对实体类的数据源,大家可以因而上边的章程展开数据绑定(使用分页控件的数码绑定格局)。

List<DictDataInfo> list = BLLFactory<DictData>.Instance.FindWithPager(condition, this.winGridViewPager1.PagerInfo);
this.winGridViewPager1.DataSource = list;

如若急需在GridView上对记录进行增产修改的,也就是要求仓储绑定数据的动静的,那么就不可以直接采取List<T>集合,而急需运用其BindingList<T>的集结,同样BindingList<T>完毕了IList<T>接口,大家得以因而构造函数new
BindingList<T>(list)方式举办类型转换,然后再度绑定到数据源即可。

修改下方面的拍卖,大家得以获得如下的多寡绑定格局:

/// <summary>
/// 绑定GridControl控件的数据源
/// </summary>
private void BindData()
{
    //使用BindingList可以进行编辑记录,否则无法存储新增记录内容
    var list = BLLFactory<DictData>.Instance.Find(treeConditionSql);
    this.gridControl1.DataSource = new BindingList<DictDataInfo>(list);
}

默许意况下,如果这么绑定,那么字段列名称会是实体类的习性名称,英文的,鲜明那样不太符合大家的展现处理,大家要求限制几个字段,而且亟需出示汉语内容,那么大家应有为GridView构建多少个绑定的列字段才方可。

例如大家得以由此函数举办字段列的构建工作,如下所示。

图片 1

中间的CreateColumn是为了简化处理情势引入的扩张函数,紧要就是达成绑定字段的增多的,可以清楚为下边代码的处理

图片 2

诸如此类大家绑定数据源后,就足以显得指定的有些字段内容了,而且是汉语列名称,如下效果所示。

图片 3

 

2、在GridView上录入数据和保存数据

只是,上面小节只是表达了数额怎么着绑定显示的,倘诺急需在GridView上直接录入数据,那么还亟需做一些新鲜的代码处理的。

在上面大家介绍使用BindingList<T>的数据源格局,确保可以突显并录入实体类集合数据的,如下代码绑定数据源所示。

图片 4

万一大家要求安装GridView能够一向录入数据,那么需求设置上面多少个特性,尤其是乙酉革命这行。

grv.OptionsBehavior.ReadOnly = false;
grv.OptionsBehavior.Editable = true;
grv.OptionsView.NewItemRowPosition = NewItemRowPosition.Bottom;

对此一些好端端的GridView起先化,大家可以透过一个恢宏函数完结它的性质设置。

grv.InitGridView(GridType.NewItem, false, EditorShowMode.MouseDownFocused);

咱俩录入新的数额行时候,往往须求安装有些相关的性质,如父ID什么的,那么需求在InitNewRow事件里面进行拍卖,如下所示,大家期望在新建记录的时候,保留记录那么些记录的父ID(来源自左边树节点的ID新闻)

图片 5

里面代码

grv.SetRowCellValue(i, "DictType_ID", typeId);//存储记录的父ID

亟待大家在那么些GridView里面有一个隐身的字段存在(如本例的DictType_ID字段),否则不能储存这一个记录内容的。

图片 6

如若我们须求在录入成功某个字段内容后,其他字段也做相应的更动,如接触关联变化,那么可以在CellValueChanged事件展开处理,如本例咱们期望名称扩充后,值和名称一致变化,那么代码如下所示。

图片 7

那样大家在界面编辑的时候,就足以获得上面的成效了。

图片 8

做到地点步骤,如若大家要求在录入数据后校验录入的新闻,并交付数据库处理,如果成功则提醒,那么就要求在事件ValidateRow里面进行拍卖了。

校验记录内容,我们可以通过上面的代码实行拍卖。

图片 9

只是貌似处境下,大家可以使用扩张函数来封装这个校验的处理,已达成简化代码的目标。

图片 10

校验通过后交付数据库,大家第一须求做的主意是定位记录集合里面当前的笔录,把它转换为实际的实体类对象,然后写入新记录或者更新处理,如下所示。

图片 11

运转程序,并在GridView中录入记录后,并相继回车,跳转到新一行的时候,触发数据校验和保留操作,保存成功后提醒用户,并得以三番四次录入新的记录,非常有利于,那么些就是使用GridView间接录入数据并保留的造福地点。

图片 12

结缘GridControl的右键菜单,大家可以完毕多少的删减、打印、导出等健康的效果结合。

 

3、基于Winform分页控件的数码显示和录入

在数额记录比较少的意况下,直接利用GridView进行显示全体记下,没有何样难题。可是在数量记录比较多的时候,假使用GridView全体举办具有的记录,会相比较影响属性,相比好的点子就是对数码进行适度的分页。

在Winform开发中,我们使用封装好的分页控件来显示数据,这些分页的性状已经组成在Winform开发框架、混合式开发框架等框架底层里面了,直接调用相应的框架业务类措施,即可取得对应业务表的分页记录,分外便利。

面前多个小节都是按照原生的GridView控件对象举行数量的显得和录入,分页控件本身也是封装GridView控件的,因而也是能够直接采纳它来拓展数量的录入处理的。使用分页控件,可以快捷进步多少的询问速度,此外可以行使代码生成工具Database2Sharp工具举办快捷支付好Winform界面,然后开展一定的改动即可,极度方便。

咱俩来探望使用分页控件做的数量展现和录入界面效果图。

图片 13

使用分页控件的主意和眼前的一向动用GridView的法门大理小异,只是部分细节处理上拓展改动即可。

分页控件,在选择代码生成工具Database2Sharp的Winform界面生成的时候,自动带有下边的分页控件开头化代码,大家遮挡其中的新增和编排处管事人件,因为大家采取直接录入的主意,不必要弹出对话框举办拍卖。

代码如下所示。

图片 14

出于我们运用分页控件,其在数码绑定的时候,列是机关创设的,因而大家不要求为GridView指定数据列,我们应用分页控件后的InitGridView的代码如下所示。

/// <summary>
/// 初始化GridView
/// </summary>
private void InitGridView()
{        
    var grd = this.winGridViewPager1.gridControl1;
    var grv = this.winGridViewPager1.gridView1;

    #region GridView控件初始化

    grv.InitGridView(GridType.NewItem, false, EditorShowMode.MouseDownFocused, "");
    grv.InitNewRow += delegate(object sender, InitNewRowEventArgs e)
    {
        //数据记录初始化的时候,设置ID和父节点的ID
        if (this.tree.FocusedNode != null)
        {
            var i = e.RowHandle;
            var typeId = this.tree.FocusedNode.GetValue("ID");
            grv.SetRowCellValue(i, "ID", Guid.NewGuid().ToString());
            grv.SetRowCellValue(i, "DictType_ID", typeId);//存储记录的父ID
        }
    };
    grv.CellValueChanged += delegate(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
    {
        //如果字段的值发生改变,触发其他值改变则在此处理
        if (e.Column.FieldName == "Name")
        {
            string value = string.Concat(grv.GetRowCellValue(e.RowHandle, "Value"));
            if (string.IsNullOrEmpty(value))
            {
                grv.SetRowCellValue(e.RowHandle, "Value", e.Value);
            }
        }
    };


    grv.ValidateRow += delegate(object sender, ValidateRowEventArgs e)
    {     
        var result = grd.ValidateRowNull(e, new string[]
        {
            "Name"
        });

        //校验通过后提交数据库
        if (result)
        {
            //获取当前操作的记录对象
            var info = grv.GetFocusedRow() as DictDataInfo;

            //如果记录对象非空,则可以写入或者更新
            if (info != null)
            {
                result = BLLFactory<DictData>.Instance.InsertUpdate(info, info.ID);

                //如果不能写入,提示用户
                if (!result)
                {
                    e.Valid = false;
                    e.ErrorText = string.Format("写入数据出错");
                }
                else
                {
                    base.ShowMessageAutoHide();
                }
            }
        }
    };

    #endregion
}

绑定数据源的方法BindData和一向生成的代码没有太大的差异,只是把GridView设置为可编制即可,代码如下所示。

图片 15

那般我们就足以完结基于Winform分页控件的根基上进行多少的一贯录入操作了,处理格局就是先拔取代码生成工具Database2Sharp举办Winform界面生成,然后开展微调代码即可,相当便宜就可以完结那种神速的多寡录入了。 

 

4、基于主从表数据录入的拍卖

在面前的记录保留和显示中间,都是使用一个视图的章程展开数据的来得和录入的,倘若对于主从表的笔录同时录入,那么就必要主从表多个GridView来进展突显和数目录入的了,对于主题表录入相对复杂一些,具体什么操作呢?

此地大家照样选取分页控件来开展数量的分页及直接录入数据操作,而且扩展了主从表数据同时在一个GridControl界面上进行拍卖。

那般主表记录为字典类型,从表为字典明细项目,得到的多少浮现界面效果如下所示。

图片 16

本来大家可一直在底层举办数据的录入,包含主表记录和从表的精心记录,都得以成功的录入并开展封存处理的,界面效果如下所示。

图片 17

GridView的主从关系须求安装好集合的照射关系,大家须要经过设置GridLevelNode集合落成主从表关系的拍卖的。

开始化从表的GridView2和主从表关系的代码如下所示

 图片 18

透过上面的起初化代码,指定了主从表的涉嫌后,大家还需求对绑定的数据源举办自然的拍卖,才可以在GridControl控件上显得主从表关系的笔录。

首先需求定义一个业务对象,用来储存主从关系的笔录对象。

图片 19

然后在BindData绑定数据的时候,代码处理如下即可。

图片 20

如此就可以拿走初始介绍的基本表界面效果了。

图片 21

 

多少保存的代码和后面的操作看似,大家要求各自对GridView1和GridView2的数据保存操作进行处理,如下代码所示。

图片 22

GridView2的字典项目明细保存操作如下所示。

图片 23

主从表的笔录删除这里须求顺带介绍一下,由于主从表公用一个右键菜单的删减操作。

图片 24

那就是说处理的时候,我们须求看清是操作从表依旧主表记录,对它们要分开处理,然后提醒是不是操作成功,借使成功,大家可以移除那行即可,幸免重新更新数据造成的刀口丢失。

图片 25

上述就是介绍各样在GridView界面上一贯录入数据并保留的处理操作,即使一般景况下边,大家提出通过独立的弹出界面举行内容的突显和录入,可是对于有些字段较少,或者喜欢平素录入记录的用户来说,那种措施也是一种格外不利的心得效果,也得以直达疾速录入的目标,可以把那种方法作为我付出框架数据至极录入的增补。 

 

相关文章