Oracle以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构建几只绑定的列字段才足以。

诸如我们得经函数进行字段列的构建工作,如下所示。

Oracle 1

内部的CreateColumn是以简化处理模式引入的壮大函数,主要就是实现绑定字段的充实的,可以清楚呢下代码的处理

Oracle 2

这般咱们绑定数据源后,就可显示指定的局部字段内容了,而且是中文列名称,如下效果所示。

Oracle 3

 

2、在GridView上录入数据与保留数据

而是,上面小节只是说明了数码如何绑定显示的,如果急需在GridView上直接录入数据,那么还得举行有独特之代码处理的。

每当方我们介绍以BindingList<T>的数据源方式,确保好来得并录入实体类集合数据的,如下代码绑定数据源所示。

Oracle 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信息)

Oracle 5

中代码

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

急需我们当这个GridView里面有一个躲的字段存在(如本例的DictType_ID字段),否则无法储存这个记录内容的。

Oracle 6

如若我们用在录入成功有字段内容后,其他字段也举行相应的转移,如接触关联变化,那么好当CellValueChanged事件展开处理,如本例我们愿意名称增加后,值与称号相同变化,那么代码如下所示。

Oracle 7

如此我们在界面编辑的时段,就可以赢得下面的功力了。

Oracle 8

完点步骤,如果我们用以录入数据后校验录入的音信,并付诸数据库处理,如果成功则提醒,那么就是待以事件ValidateRow里面进行拍卖了。

校验记录内容,我们得经下的代码进行处理。

Oracle 9

而貌似情况下,我们得以下扩展函数来封装这些校验的拍卖,已上简化代码的目的。

Oracle 10

校验通过后付数据库,我们率先用做的道是固定记录集合里面当前之记录,把它换为现实的实体类对象,然后写副新记录或更新处理,如下所示。

Oracle 11

运转程序,并在GridView中录入记录后,并逐条回车,跳反到新一行的上,触发数据校验和保留操作,保存成功后提醒用户,并得以连续录入新的笔录,非常便宜,这个就算是行使GridView直接录入数据并保存的造福地方。

Oracle 12

结GridControl的右键菜单,我们得兑现数量的去、打印、导出等常规的效能整合。

 

3、基于Winform分页控件的多寡显示及录入

在数码记录比较少之场面下,直接用GridView进行展示周笔录,没有呀问题。但是当数量记录比较多之时节,如果就此GridView全部进行具有的笔录,会比较影响属性,比较好之法门就是针对数码进行适当的分页。

在Winform开发被,我们利用封装好的分页控件来显示数据,这个分页的特征都组成在Winform开发框架、混合式开发框架等框架底层里面了,直接调用相应的框架业务类似措施,即可得到对诺业务表的分页记录,非常便利。

面前两个小节都是根据原生的GridView控件对象进行数量的展示暨录入,分页控件本身为是封装GridView控件的,因此也是可以直接运用她来进展多少的录入处理的。使用分页控件,可以快捷提高多少的查询速度,另外可以行使代码生成工具Database2Sharp工具进行高效开好Winform界面,然后开展自然的改即可,非常好。

我们来探用分页控件做的数量显示和录入界面效果图。

Oracle 13

使分页控件的方法跟眼前的一直利用GridView的办法大同小异,只是一对细节处理达成拓展改动即可。

分页控件,在以代码生成工具Database2Sharp的Winform界面生成的当儿,自动带有下面的分页控件初始化代码,我们遮挡其中的新增及编排处理事件,因为咱们运用直接录入的不二法门,不需弹出对话框进行拍卖。

代码如下所示。

Oracle 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设置也而编制即可,代码如下所示。

Oracle 15

然咱们就可实现基于Winform分页控件的基本功及进展数量的直录入操作了,处理方式就是优先运代码生成工具Database2Sharp进行Winform界面生成,然后开展微调代码即可,非常便宜就得兑现这种高速的多寡录入了。 

 

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

以前头的记录封存与出示中,都是应用一个视图的章程开展多少的显得与录入的,如果对主从表的笔录同时录入,那么尽管需要主从表两个GridView来进展展示和数码录入的了,对于基本表录入相对复杂一些,具体如何操作也?

此我们依旧用分页控件来拓展多少的分页及直接录入数据操作,而且多了主从表数据而于一个GridControl界面上展开处理。

然主表记录也字典类型,从表为字典明细项目,得到的数码展示界面效果如下所示。

Oracle 16

当我们可径直当底部进行数据的录入,包括主表记录与从表的有心人记录,都好完成的录入并拓展保存处理的,界面效果如下所示。

Oracle 17

GridView的主从关系需要安装好聚的照射关系,我们要经设置GridLevelNode集合实现主从表关系的拍卖的。

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

 Oracle 18

经者的初始化代码,指定了主从表的关联后,我们还欲针对绑定的数据源进行得之处理,才能够当GridControl控件上亮主从表关系之记录。

先是需要定义一个业务对象,用来囤主从关系的笔录对象。

Oracle 19

接下来以BindData绑定数据的时段,代码处理如下即可。

Oracle 20

诸如此类便得收获初步介绍的中心表界面效果了。

Oracle 21

 

数量保存的代码和眼前的操作看似,我们需要各自指向GridView1和GridView2的多少保存操作进行拍卖,如下代码所示。

Oracle 22

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

Oracle 23

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

Oracle 24

这就是说处理的时节,我们用判定是操作从表还是主表记录,对它要分别处理,然后提醒是否操作成,如果成功,我们得移除这行即可,避免重新更新数据造成的要害丢失。

Oracle 25

以上就是是介绍各种以GridView界面上一直录入数据并保存的拍卖操作,虽然一般情形下面,我们建议经独立的弹有界面进行内容之亮以及录入,但是对于有字段较少,或者好一直录入记录的用户来说,这种方法啊是同等种怪不利的体会效果,也可齐快速录入的目的,可以将这种方法作为我开框架数据异常录入的填补。 

 

相关文章