95992828九五至尊2

GridControl控件的数目显示的体裁控制,利用DevExpress控件落成多少的快速录入和抉择

二月 18th, 2019  |  882828九五至尊手机版

在实质上的类型支付进程中,有好的控件或许功能模块,作者都以想艺术尽只怕集成到自身的WInform开发框架中,那样前边开发品种起来,就足以节约多如牛毛商量时间,并能重复使用,万分迅猛便民。在自作者很早在此之前的一篇博客《在GridControl控件中应用SearchLookUp艾德it创设数据火速输入》就已经介绍,怎么着在列表控件中落成多少的疾速录入,本文介绍其余一种方法,通过文件输入框的输入选用,可以兑现数量的快速录入,原理和事先一篇几乎,然则本次运用DevExpress控件的GridLookup艾德it控件封装类举办数量的拍卖。

882828九五至尊手机版 1 882828九五至尊手机版 2 如上两图所示,Dev列表控件GridControl暗许的格式并从未渐变变脸效果,展现的日子数据,也是“yyyy-MM-dd”的格式,而非“yyyy-MM-dd HH:mm:ss”尽管对于背后有长格式的日子数据也一如既往。上面分别对那三种处境开展表达。 如上两图所示,大家有时候要求控制列表访问过的颜料变化,大概是时间显示格式等内容,这几个时候设置GridView的RowCellStyle即可兑现,如下所示。

this.gridView1.RowCellStyle += new DevExpress.XtraGrid.Views.Grid.RowCellStyleEventHandler(gridView1_RowCellStyle);

void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
{
if (e.Column.FieldName == "PublishType")
{
if (e.CellValue != null && e.CellValue.ToString() == "中介")
{
e.Appearance.BackColor = Color.DeepSkyBlue;
e.Appearance.BackColor2 = Color.LightCyan;
}
}
if (e.Column.FieldName == "PublishTime")
{
e.Column.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
}
if (e.Column.FieldName == "Title")
{
string id = this.winGridViewPager1.gridView1.GetRowCellDisplayText(e.RowHandle, "Id");
if (historyDict.ContainsKey(id))
{
e.Appearance.BackColor = Color.DeepSkyBlue;
e.Appearance.BackColor2 = Color.LightCyan;
}
}
}

对于日期格式,假若急需列表中的日期小于有些值(如壹玖零贰-1-1)的时候,就安装为空,那么可以经过上面的不二法门进行安装即可化解。

this.winGridViewPager1.gridView1.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(gridView1_CustomColumnDisplayText);

void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
{
if (e.Column.ColumnType == typeof(DateTime))
{
string columnName = e.Column.FieldName;
if (e.Value != null && Convert.ToDateTime(e.Value) <=
Convert.ToDateTime("1900-1-1"))
{
e.DisplayText = "";
}
}
}

GridControl中的GridView内容打印

882828九五至尊手机版 3

是因为GridView的美丽封装性,落成打印的代码很粗略。

private void menu_Print_Click(object sender, EventArgs e)
{
PrintableComponentLink link = new PrintableComponentLink(new PrintingSystem());
link.Component = this.gridControl1;
link.Landscape = true;
link.PaperKind = System.Drawing.Printing.PaperKind.A3;
link.CreateMarginalHeaderArea += new
CreateAreaEventHandler(Link_CreateMarginalHeaderArea);
link.CreateDocument();
link.ShowPreview();
}
private void Link_CreateMarginalHeaderArea(object sender, CreateAreaEventArgs e)
{
string title = string.Format("年度大体检-({0}年度)", this.txtYear.Text);
PageInfoBrick brick = e.Graph.DrawPageInfo(PageInfo.None, title, Color.DarkBlue,
new RectangleF(0, 0, 100, 21), BorderSide.None);
brick.LineAlignment = BrickAlignment.Center;
brick.Alignment = BrickAlignment.Center;
brick.AutoWidth = true;
brick.Font = new System.Drawing.Font("宋体", 11f, FontStyle.Bold);
}

 

一 、GridControl集成SearchLookUp艾德it的法力表现

先是大家来回看一下,GridControl列表控件中哪些促成数据的高效录入的。一般景色下,在本身的框架都以使用弹出窗体举行正式数据的录入,那样的景况相比较通用,不过对于部分想完结数量在列表中迅速录入,只怕就不自然符合他们的选取习惯,客户须求往往是首先位,若是有诸如此类的渴求,大家必然要想艺术满意。

贰个实在的案例就是门诊的时候,医务卫生人员用药的情况,除了采纳任何情节外,主要的就是快捷录入药品音讯。我们常常去大一点
的卫生院就诊,好像看到的大多数操作都是如此。还有一种形式就是销售人士提供的价码单,从产品里面拔取新闻,然后修改下价格,这几个现象都以很适合那样的操作的。上边是多少个门诊的例子。

882828九五至尊手机版 4

设置GridView的行提示器(行头)显示行号

882828九五至尊手机版 5
在自作者的分页控件以及Winform开发框架很各体系介绍其中,很多都显得了行号,其实这些在DevExpress中的完毕很不难,如果必要,可以兑以后友好的代码里面。

1) 先已毕GridView的CustomDrawRowIndicator事件,落成代码如下所示。

private void advBandedGridView1_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();
}
}
}

2) 然后安装GridView控件的IndicatorWidth为适当的宽窄,如40左右则比较好。
882828九五至尊手机版 6

3) 那样设置后,就能顺风突显行号了,是否很便利呢。

在作者的分页控件以及Winform开发框架很多门类介绍其中,很多都显得了行号,其实这一个在DevExpress中的完毕很粗略,如若要求,可以兑将来友好的代码里面。

1) 先完成GridView的CustomDrawRowIndicator事件,已毕代码如下所示。

private void advBandedGridView1_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();
        }
    }
}

882828九五至尊手机版, 

2)然后设置GridView控件的IndicatorWidth为适龄的宽窄,如40左右则比较好。

882828九五至尊手机版 7

如此设置后,就能如愿突显行号了,是还是不是很便宜呢。

贰 、在文件输入控件中贯彻多少的迅猛录入或拔取

1)原有系统控件完结的界面效果

诸多时候,大家大概须要在编辑框里面快捷录入数据,假设是彻头彻尾的抉择列表项目,那么可以接纳GridLookup艾德it或许SearchLookup艾德it控件,那五个控件都以足以兑现飞快的选择的,如下DevExpress例子的界面所示。

GridLookup艾德it例子效果:

882828九五至尊手机版 8

SearchLookup艾德it例子效果:

882828九五至尊手机版 9

2)Winform开发框架中封装的GridLookup艾德it控件的输入效果

上边八个不相同的例子,他们弹出三个新的列表框操作都大约的,不一样的是SearchLookupEdit控件会有一个得以寻找的输入框,完成数量的过滤查找。

运用GridLookup艾德it控件,可以把输入框的质量TextEditStyle修改为修改为TextEditStyles.Standard,借使要封装用来可以允许输入新的始末,记得要处理ProcessNewValue函数,暗中同意GridLookup艾德it控件不一致意输入列表中不设有的内容,相当于只好选用列表的情节。

不过,大家项目很多时候,需求贰个方可录入,也可以从列表中采取数据的情景,最好可以整合拼音码完成数据的连忙录入,如下界面所示。

882828九五至尊手机版 10

当大家输入粤语的时候,会自行从列表中进行数量的过滤,如下所示。

882828九五至尊手机版 11

当大家输入拼音简码的时候,也得以兑现均等的效果,如下所示。

882828九五至尊手机版 12

自然,如若列表里面没有对应的多少的时候,我们得以输入新的内容(注意:暗许的GridLookupEdit是不容许输入新情节的)。

882828九五至尊手机版 13

那般在故事情节很多的时候,就可以落成数量的便捷采用依然录入新的多寡了。

例如小编的《医院科室数据管理种类》软件出品内部,就须求从大批量的入院诊断或然出院诊断中拔取仍旧输入新的诊断,下面的控件效果就是自家所急需的。

882828九五至尊手机版 14

自然,以上只是框架作用模块的深海一栗,很多根本的功力并不在该文中介绍,具体可以通晓那些框架设计图,大概查看《 Winform开发框架的竹签内容

Winform开发框架的基本点成效概览如下图所示。

882828九五至尊手机版 15

⑤ 、GridView表头多行突显(折行),表头及行内容居中操作

882828九五至尊手机版 16

在一部分自定义的列表中,我们为了创建突显表头的始末,大概会须求表头突显的文字可以折行突显,然后还索要内容居中体现,那么在DevExpress该如何操作呢,代码设置如下所示。

//表头折行设置
this.gridView1.ColumnPanelRowHeight = 40;
this.gridView1.OptionsView.AllowHtmlDrawHeaders = true;
this.gridView1.Appearance.HeaderPanel.TextOptions.WordWrap = DevExpress.Utils.WordWrap.Wrap;
//表头及行内容居中显示
this.gridView1.Appearance.Row.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
this.gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;

接下来设置表头的时候,设置剧情使用\r\n来进行换行,如:体重\r\n(kg)

上面是自己分页控件里面的例子设置,供参考。

this.winGridViewPager1.AddColumnAlias("Weight", "体重\r\n(kg)");
this.winGridViewPager1.AddColumnAlias("Pulse", "脉搏\r\n(次)");
this.winGridViewPager1.AddColumnAlias("BloodSystolic", "收缩压");
this.winGridViewPager1.AddColumnAlias("BloodDiastolic", "舒张压");
this.winGridViewPager1.AddColumnAlias("SightLeft", "视力\r\n(左)");
this.winGridViewPager1.AddColumnAlias("SightRight", "视力\r\n(右)");

陆 、控件内容输入难点

在客户使用软件的时候,反馈说有一对数字输入框、日期输入框,不扶助键盘输入内容,经测试,确实是存在这么些题材,默许的数字、日期等输入,都要切换输入法才可以输入,无法暗中承认就襄助数字的输入,那么是不是有措施消除呢,当然办法总是有个别。

实在只须求设置 ImeMode=Off 即可消除难点,关于这么些个性,我们能够参考上边的牵线。(就支出而言,记得逢数字,日期的控件,必须安装ImeMode=Off
,否则你的软件应用客户会骂娘。

ImeMode
枚举:
点名2个值,该值是用来鲜明在选定了目的时该对象的输入法编辑器
(IME) 的景况。 以下是微软的演说:

成员名称 说明
Alpha 字母数字单字节字符 (SBC)。此设置仅对朝鲜语和日语 IME 有效。
AlphaFull 字母数字双字节字符。此设置仅对朝鲜语和日语 IME 有效。
Close Disable IME 被禁用。如果使用此设置,则用户无法从键盘打开 IME,而且 IME 浮动窗口处于隐藏状态。
Hangul 朝鲜文 SBC。此设置仅对朝鲜语 IME 有效。
HangulFull 朝鲜文 DBC。此设置仅对朝鲜语 IME 有效。
Hiragana 平假名 DBC。此设置仅对日语 IME 有效。
Inherit 继承父控件的 IME 模式。
Katakana 片假名 DBC。此设置仅对日语 IME 有效。
KatakanaHalf 片假名 SBC。此设置仅对日语 IME 有效。
NoControl 无(默认)。
Off IME 已关闭。此模式指示 IME 已关闭,这意味着该对象的行为方式与英语输入模式相同。 此设置仅对日语、简体中文和繁体中文 IME 有效。
On IME 已打开。此值指示 IME 已打开,可以输入中文或日语特定的字符。此设置仅对日语、简体中文和繁体中文 IME 有效。

叁 、在文书输入控件中已毕数量的很快录入的代码完结

其一成效模块的首要已毕就是要重复封装GridLookupEdit控件,并安装其有个别暗中认同属性,还索要处理前面所说过的,处理该对象的ProcessNewValue的事件处理,部分代码如下所示。

    /// <summary>
    /// 自定义的GridLookUpEdit控件
    /// </summary>
    public class CustomGridLookUpEdit : GridLookUpEdit
    {
        /// <summary>
        /// 是否禁止新增内容
        /// </summary>
        [Browsable(true), Description("是否禁止新增内容")]
        public bool DisableAddNew { get; set; }

        static CustomGridLookUpEdit()
        {
            RepositoryItemCustomGridLookUpEdit.RegisterCustomGridLookUpEdit();
        }

        public CustomGridLookUpEdit() : base() 
        {
            //初始化一些状态
            this.Properties.PopupFilterMode = PopupFilterMode.Contains;//包含即可
            this.Properties.ImmediatePopup = true;//是否马上弹出窗体
            this.Properties.ValidateOnEnterKey = true;//回车确认
            this.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//文本框可输入
            this.Properties.NullText = "";
            this.Properties.NullValuePrompt = "";

            this.ProcessNewValue += new DevExpress.XtraEditors.Controls.ProcessNewValueEventHandler(CustomGridLookUpEdit_ProcessNewValue);            
        }

        /// <summary>
        /// 实现在列表没有记录的时候,可以录入一个不存在的记录,类似ComoboEidt功能
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void CustomGridLookUpEdit_ProcessNewValue(object sender, DevExpress.XtraEditors.Controls.ProcessNewValueEventArgs e)
        {
            if (!DisableAddNew && !this.DesignMode)
            {
                string displayName = this.Properties.DisplayMember;
                string valueName = this.Properties.ValueMember;
                string display = e.DisplayValue.ToString();

                DataTable dtTemp = this.Properties.DataSource as DataTable;
                if (dtTemp != null)
                {
                    DataRow[] selectedRows = dtTemp.Select(string.Format("{0}='{1}'", displayName, display.Replace("'", "‘")));
                    if (selectedRows == null || selectedRows.Length == 0)
                    {
                        DataRow row = dtTemp.NewRow();
                        row[displayName] = display;
                        row[valueName] = display;
                        dtTemp.Rows.Add(row);
                        dtTemp.AcceptChanges();
                    }
                }

                e.Handled = true;
            }
        }

在调用的时候,大家要求绑定相应的多少,并且给它扩展1个拼音码的列,方便通过拼音码来贯彻长足搜索,使用代码如下所示(那里经过扩展方法的点子贯彻数据的绑定)。

        /// <summary>
        /// 绑定下拉列表控件为指定的数据字典列表
        /// </summary>
        /// <param name="combo">下拉列表控件</param>
        /// <param name="dictTypeName">数据字典类型名称</param>
        /// <param name="defaultValue">控件默认值</param>
        public static void BindDictItems(this CustomGridLookUpEdit combo, string dictTypeName, string defaultValue)
        {
            string displayName = dictTypeName;
            const string valueName = "值内容";
            const string pinyin = "拼音码";
            DataTable dt = DataTableHelper.CreateTable(string.Format("{0},{1},{2}", displayName, valueName, pinyin));

            Dictionary<string, string> dict = BLLFactory<DictData>.Instance.GetDictByDictType(dictTypeName);
            foreach (string key in dict.Keys)
            {
                DataRow row = dt.NewRow();
                row[displayName] = key;
                row[valueName] = dict[key];
                row[pinyin] = Pinyin.GetFirstPY(key);
                dt.Rows.Add(row);
            }

            combo.Properties.ValueMember = valueName;
            combo.Properties.DisplayMember = displayName;
            combo.Properties.DataSource = dt;
            combo.Properties.PopulateViewColumns();
            combo.Properties.View.Columns[valueName].Visible = false;
            combo.Properties.View.Columns[displayName].Width = 400;
            combo.Properties.View.Columns[pinyin].Width = 200;
            combo.Properties.PopupFormMinSize = new System.Drawing.Size(600, 0);

            if (!string.IsNullOrEmpty(defaultValue))
            {
                combo.EditValue = defaultValue;
            }
        }

调用代码只要求调用该方法即可。

txtInDiagnosis.BindDictItems("入院诊断");

如上就是本人对于那种利用DevExpress控件完毕数据的敏捷录入和采取操作的法力演示和事实上代码逻辑浮现,希望对大家享有扶助。

⑦ 、多行表头的已毕

882828九五至尊手机版 17

有时候,我们为了局地特出的内需,要对表头举办专门的排版,使其襄助多行表头的效应,如上图所示,这样便于对各种内容展开归类突显,易于阅读,在DevExpress中应当怎么兑现那些效率啊?

1)先在设计格局将一般的GridView转换为BandedGridView可能AdvBandedGridView,那样才能扶助那种多行表头的做法,如下所示。

882828九五至尊手机版 18

2)定义一些字段,用来显示中间的情节,如下图所示。

882828九五至尊手机版 19

3)定义一些Band列,设置相关的属性,并把规划界面中的字段列表拖动到对应过的Band列下面,那样就构成了一个Band列和字段内容的呼应关系。

882828九五至尊手机版 20

成就地点的绑定关系后,记得设置GridView控件的天性,使其不用显示原本的ColumnHeader等情节。

882828九五至尊手机版 21

安装好这么些故事情节,才能创建、完美突显出多行表头的消息。

8.在GridControl控件中应用SearchLookUp艾德it营造数据快捷输入

882828九五至尊手机版 22

三个实际上的案例就是门诊的时候,医务人员用药的景况,除了采取其余内容外,主要的就是高速录入药品消息。大家寻常去大一点
的医院就医,好像看到的绝半数以上操作都以如此。还有一种艺术就是销售人士提供的报价单,从产品中间采纳音讯,然后修改下价格,这个场景都以很适合那样的操作的。

相关文章

Your Comments

近期评论

    功能


    网站地图xml地图