你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

DevExpress学习

2022/8/20 16:56:48

DevExpress学习

一、安装、破解、汉化

1、安装

  1. 安装:我只用Reporting和WinForms Controls,所以我只选择这两个模块D:\net\soft\DevExpress2017\DevExpressUniversalTrialComplete-20180124.exe

  2. 破解:D:\net\soft\DevExpress2017\Cracks\Crack 2\DevExpress.Patch.exe

  3. 说明:数据包中的三个crack文件夹代表三种破解方法,请自行选择

  4. 破解查看:vs2017 --> DevExpress --> Your License Information 打开会看到你有一个期限,2037-01-31

    -- 5642天
    select to_date('2037-01-31','yyyy-mm-dd') - to_date('2021-08-21','yyyy-mm-dd') from dual;
    

    ​ 5、D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ItemTemplates\CSharp\Code\2052\Class

2、特点

优势:美化界面、控件定制简单、专业化、替代所有的传统控制,换肤、菜单

3、汉化

a、单个项目汉化:

  1. 在Debug 下添加 zh-CN 汉化包:将汉化包改名字为zh-CN,放到bin/debug下面;
  2. 入口main函数加载如下代码;

b、统一汉化

  1. 将汉化包放到安装目录D:\Program Files (x86)\DevExpress 17.2\Components\Bin\Framework下

  2. 打开vs 2017 的开发人员命令提示符,输入命令:cd D:\Program Files (x86)\DevExpress 17.2\Components\Bin\Framework\zh-CN

  3. 继续输入命令 dir /B *.dll>temp.bat

  4. 以文本方式打开temp.bat文件编辑,在每一个DevExpress前加上gacutil -i

  5. 然后在命令行窗口执行temp.bat

  6. 这样做的好处是应用什么控件会自动给你加载对应的汉化;

  7. temp.bat部分代码

    gacutil -i DevExpress.Charts.Designer.v17.2.resources.dll
    gacutil -i DevExpress.Dashboard.v17.2.Core.resources.dll
    gacutil -i DevExpress.Dashboard.v17.2.Web.resources.dll
    gacutil -i DevExpress.Dashboard.v17.2.Win.resources.dll
    gacutil -i DevExpress.Data.v17.2.resources.dll
    ...
    

4、命名规则

组件类型 缩写 例子
Label lbl lblNote
TextBox txt txtName
Button btn btnOk
ImageButton ib ibOk
LinkButton lb lbJump
HyperLink hl hlJump
DropDownList ddl ddlList
CheckBox cb cbChoice
CheckBoxList cbl cblGroup
RadioButton rb rbChoice
RadioButtonList rbl rblGroup
Image img imgBeauty
Panel pnl pnlTree
TreeView tv tvUnit
WebComTable wct wctBasic
ImageDateTimeInput dti dtiStart
ComboBox cb cbList
MyImageButton mib mibOk
WebComm.TreeView tv tvUnit
PagBar pb pbMaster

二、基本控件

LabelControl

  1. 描述性标签
  2. AutoSizeMode:设置为None,可以随意拉大与缩小控件大小;设置为Horizontal(水平的);设置为Vertical(垂直的),可以水平拉长;
  3. BackColor:设置背景色;设置为Transparent,可以透明到父级;前提条件如下:
    1. 设置LookAndFeel下的style为Flat或UtralFlat
    2. 设置UserLookAndFeel属性为false
  4. ForeColor:设置前景颜色(字体颜色);
  5. Text:设置文本内容;
  6. Font:设置字体、字形、大小;
  7. BorderStyle:设置边框样式;
  8. Appearance(外观):
    1. BackColor、BackColor2设置渐变色;
    2. GradientMode设置渐变色的方向,可以水平渐变(Horizontal)、垂直渐变(Vertical)、左上到右下(ForwardDiagonal)、右上到左下(BackwardDiagonal)
    3. Image:设置图片;ImageAlignToText当有图片(image)时,图片相对于文本的位置,比如LeftCenter,则是图片在文字的左侧居中位置;
    4. ImageAlign:背景图片的对齐方式;
    5. TextOptions:HAlignment设置为Center,可以让文本居中,前提是AutoSizeMode=none;
  9. AppearanceDisabled:不可用状态下的外观,设计模式下无法看到,只有在运行时才可以看到;
  10. AppearanceHovered:鼠标经过时的外观;
  11. AppearancePressed:按下时的外观;
  12. LineColor:线的颜色
  13. LineLocation:线的位置;
  14. LineStyle:线的样式;
  15. LineOrientation:线的方向;
  16. LineVisible:线是否显示;
  17. LookAndFeel:设置外观,一般把UseDefaultLookAndFeel设置为true,适用缺省的皮肤;
  18. Font:字体的设置
  19. AutoEllipsis:当文本框长度不够的时候,可以显示省略号;
  20. WordWrap:是否自动折行;默认为NoWrap;当设置为默认或NoWrap时,AutoEllipsis才起效;
  21. 如果想让一个文字透明显示,
    1. 设置背景色为Transparent
    2. 因为背景色是相对于父级透明,所以必须设置父级;LblTitle.Parent = LblParent;

XtraForm

  • DevExpress.XtraEditors.XtraForm通过定义可以看出,它实际上派于Form,主要用于LookAndFeel(外观和感觉),换肤效果;

    // XtraForm 定义部分
    public class XtraForm : MouseWheelContainerForm, ISupportLookAndFeel, IDXControl, ICustomDrawNonClientArea, IGlassForm
    
    // MouseWheelContainerForm 定义部分
    public abstract class MouseWheelContainerForm : Form, IMouseWheelContainer    
    
  • XtraForm 继承于Form,并且支持DevExpress中的 Winform的更换皮肤功能;

  • XtraForm中的LookAndFeel属性中的SkinName可以设置不同的皮肤,但是需要设置UserDefaultLookAndFeel为FALSE才好使;一个应用程序最好只有一个DefaultLookAndFeel

  • 设置了LookAndFeel,其实并不会生效,需要在入口Main函数添加如下代码,才能生效

    // 只有设置了这段代码,皮肤才会生效
    SkinManager.EnableFormSkins();
    // 设置默认皮肤
    UserLookAndFeel.Default.SetSkinStyle("McSkin");
    
  • WindowState:确定窗体的初始可视状态。

    ​ Normal:以Size属性设置的窗体大小进行显示;

    ​ Minimized:最小化显示;

    ​ Maximized:最大化显示;

  • MaximizeBox:窗体标题栏的右上角是否有最大化按钮。默认为True。

  • MiniMizeBox:窗体标题栏的右上角是否有最小化按钮。默认为True。

  • Icon:指示窗体的图标。这在窗体的系统菜单框中显示,以及当窗体最小化时显示。

  • ShowIcon:指示是否在窗体的标题栏中显示图标。默认为true

  • FormBorderStyle:指示窗体的边框和标题栏的外观和行为。

    • None:无边框;
  • FixedSingle:固定的单行边框;

    • Fixed3D:固定的三维边框;
  • FixedDialog:固定的对话框样式的粗边框;

    • Sizeable:可调整大小的边框;
  • FixedToolWindow:不可调整大小的工具窗口边框。工具窗口不会显示在任务栏中也不会显 示在当用户按 Alt+Tab 时出现的窗口中。尽管指定 FixedToolWindow的窗体通常不显示在任务栏中,还是必须确保 ShowInTaskbar 属性设置为 false,因为其默认值为 true;

  • SizableToolWindow:可调整大小的工具窗口边框。工具窗口不会显示在任务栏中也不会显 示在当用户按 Alt+Tab 时出现的窗口中。

  • FormBorderEffect:默认不带阴影效果,可以选择shadow,可以让底边和右边带上阴影效果;

  • Opacity:可以选择它的透明度;单位:百分比

  • IsMdiContainer:是否是Mdi窗口;

  • StartPosition:设置窗口打开的起始位置;

  • TopMost:指示该窗体是否始终显示在此属性未设置为true的所有其它窗体之上。

  • ShowInTaskbar:窗体是否出现在任务栏中。默认为True。否则最小化之后找不到;

  • AcceptButton:默认回车触发的按钮;

  • CancelButton:默认Esc触发的按钮

SimpleButton

  • 主要用于执行命令的,比如打开页面、提交信息、查询数据等;

  • ShowFocusRectangle:是否按钮上显示文字的边框,一般设置为false

  • Enabled:设置为false,不允许点击;

  • Visible:设置为false,不可见;

  • TooTip:小提示,只有可用状态下;

  • ImageOptions:可以设置图片、图片相对于文字的位置;

  • SvgImage:一般建议设置这个矢量图;

  • Text:按钮的文本,可以适用超链接标签,但是必须设置AllowHtmlDraw为true;

  • LookAndFeel的style:如果不想适用皮肤的话,可以把这个属性设置为非skin即可

TextEdit

  • 单行文本框;

    public class TextEdit : BaseEdit, IDXMenuSupport, IMouseWheelSupport
    
    public class BaseEdit : BaseControl, IProcessInplaceEditValueChanged
    
    public abstract class BaseControl : ControlBase, IDXFocusController, IToolTipControlClient, ISupportLookAndFeel, ISupportStyleController, IXtraResizableControl, ISupportXtraAnimation, ISupportToolTipsForm
    
    public class ControlBase : Control    
    
  • 基本控件分为两大类:BaseEdit和BaseStyleControl,都继承与BaseControl,它继承于ControlBase,它继承于Control

  • BaseStyleControl:可设置自身特有的样式,如ButtonStyle、HighlightedItemStyle等;

  • BaseEdit:可以通过EditValue属性获取当前控件的值,Properties属性获取控件特有的属性;

    // Text 是一个字符串,而EditValue接收的参数是一个对象;
    string name  = TxtUserName.Text.Trim();
    // EditValue 会造成空指针异常
    string name1 = TxtUserName.EditValue.ToString().Trim();
    
  • LabelControl:支持格式化文本、图像、多行文本字符串和Html标签,外观(不可用、悬停、按下、默认)、图片与文本相应位置、标签线、是否文本省略等;

  • SimpleButton:可以显示文本和自定义图像,并在运行时单击而不接收焦点的按钮,普通按钮外观、回执Html格式标签、图标、图片、LookAndFeel;事件:单击、双击、鼠标单击、双击

  • TextEdit:单行文本编辑器,文本输入、密码输入、设置输入格式、外观、EditValue Mask、Format、 NullText等;事件:click、DoubleClick、EditValueChanged、KeyPress

  • PasswordChar:密码输入框,可以设置密码的文本用什么符号代替;

  • UserSystemPasswordChar:这个为true时,则适用系统默认的圆点作为密码输入框,自定义的无效;

  • Mask:掩码信息;MaskType:设置值类型

  • 设置文本输入框只能输入整数和小数 【MaskType=RegEx】【EditMak=\d+(\R.\d{0,2})?】

  • Properties下的DisplayFormat和EditFormat的区别;显示格式化和编辑时的格式化;这个时候有可能Text和EditValue的值可能就不等;

  • 当文本输入框组件绑定数据源时,直接給Text, EditValue属性赋值是无效的,因为没有写入数据到数据源。

    • 解决方案1:赋值后,使用WriteValue方法。

      //模拟给TextEdit赋值
      private void button1_Click(object sender, EventArgs e)
      {
        //textEdit1.Text = "www.CSFramework.com";
        textEdit1.EditValue = "www.CSFramework.com";
      
        //使用此方法正常!
        //WriteValue:读取控件属性的当前值并将其写入数据源
         textEdit1.DataBindings[0].WriteValue();
      }
      
  • NullText:水印提示,当输入完成再删除后是不显示的;

  • ShowNullValuePromptWhenFocused:显示空值得提醒;设为true

  • NullTextPrompt:null时的提醒;

  • NullValuePromptShowForEmptyValue:空值时提醒;设为true

  • ContextImageOptions:文本框前面设置图片;

    TxtUserName.Properties.ContextImageOptions.Image = global::StudentManager.Properties.Resources._1;
    
  • CharacterCasing:Upper(大写),Lower(小写)、Normal(标准)

  • BorderStyle:Style3D(边框效果)

  • 还可以设置获取焦点是的外观、只读时的外观、不可用时的外观

  • 常用事件:EditValueChanged EditValueChanging TextChanged

ButtonEdit

  • 带按钮的文本框:本质还是一个文本框;支持编辑框的内置按钮的文本编辑器,派生于TextEdit;

    public class ButtonEdit : TextEdit
    
  • 两种方式, 进入EditorButton集合编辑器:设置文本框右侧的按钮

      1. 在属性中Properties下的Buttons项;
      2. 窗体上点击ButtonEdit右上方的小箭头,弹出菜单中选择Buttons,也是一样的
  • ButtonEdit的文本框右侧的按钮可以有多个,在EditorButton集合编辑器中都可以进行设置。

  • 在文本框右侧的按钮,全是DevExpress.XtraEditors.Controls.EditorButton类型的。

  • 点击按钮的事件,可以在ButtonClick事件中指定

    • Click事件这里的参数e为DevExpress.XtraEditors.Controls.*ButtonPressedEventArgs*类型,可以在事件中根据*Caption、Kind*等属性判断当前鼠标点击的是哪个Button,再执行相应的逻辑。

    • 	private void BtneTop_ButtonClick(object sender, ButtonPressedEventArgs e)
              {
                  if (e.Button.Kind == ButtonPredefines.OK)
                  {
                      MessageBox.Show("Ok");
                  }
                  else if (e.Button.Kind == ButtonPredefines.Glyph)
                  {
                      if (e.Button.Caption == "Add")
                          MessageBox.Show("Add");
                      else if (e.Button.Caption == "open")
                     {
                         OpenFileDialog dlg = new OpenFileDialog();
                         dlg.Multiselect = false;//允许同时选择多个文件 
                         if (dlg.ShowDialog()==DialogResult.OK)
                         {
                             BtneTop.Text = dlg.FileName;
                         }
                     }
                 }
             }
      
  • 注意: Caption和*Kind选项*

  • 在每个按钮的*Kind属性*中,可以设置按钮的类型。按钮类型保存在枚举DevExpress.XtraEditors.Controls.ButtonPredefines中;该枚举包括如下枚举值(共计19个):

    • Close,一个x型图案
    • Delete,一个x型图案,线条比Close要细一些
    • SpinRight,右三角形箭头
    • SpinLeft,左三角形箭头
    • SpinDown,下三角形箭头
    • SpinUp,上三角形箭头
    • Combo,同SpinDown
    • Right,同SpinRight
    • Left,同SpinLeft
    • Up,同SpinUp
    • Down,同SpinDown
    • DropDown,同SpinDown
    • Glyph(字形,图像字符),图案可由Image属性指定其中,当Kind被设置为Glyph时,可以通过设置Image属性来指定图案,当kind都为该项时,在事件中可以用Caption来区别;
    • Ellipsis,省略号,三个点,默认图案
    • OK,一个√型图案
    • Plus,一个+型图案
    • Minus,一个-型图案
    • Redo,撤销图案,一个顺时针转动最后指向右侧的箭头
    • Undo,重做图案,一个逆时针转动最后指向右侧的箭头;

PictureEdit

  • 图片显示控件

  • 而ImageEdit 是在下拉窗口中显示图像

  • BackColor 设置为Transparent 可以使图片背景透明 前提条件 你的图片是背景透明的PNG或者Gif

  • borderStyle 设为NoBorder 可以使图片无边框

  • SizeMode 图片显示的格式 选择Zoom 则为比例缩放显示

  • NullText 无图片或者无法显示时展示的文字

  • ReadOnly 是否只读

  • showMenu 是否显示右键菜单栏目

  • 代码设置图片:pictureEdit1.Image=Image.FromFile(path); path为图片硬盘上的绝对路径

     pictureEdit2.Image = Image.FromFile(Environment.CurrentDirectory + ".\\image\\wx2022.png");
    

CheckEdit

  • 扮演两个角色 RadioButton和CheckBox

  • Name属性:该属性是设置控件的名称,chk为前缀,后面标注控件的名称。中间尽量不要用下划线。

  • Checked属性:这个属性是表明控件的状态是否是被选中,,如果是的话,则这个控件的Value为True;

  • Enabled属性:这个属性是设置控件是否可以被操作,如果是,这说明该控件是被编辑,否则不能被编辑。

  • 支持用户在未选中、选中和(可选)不确定状态之间选择,可以将多个组和到一个RadioGroup中

  • Properties.CheckStyle属性:该属性是设置控件的一种格式,默认为Standard属性,也可以设置为其他的属性。切换图标样式,比如设置为radio样式

  • DisplayFormat属性:这个属性是设置控件的一种格式,可以是Custom,也可以是Datetime,具体哪种可以根据情况来定。

  • Properties.AllowGrayed属性设置CheckBox是否允许中间状态

  • Properties.RadioGroupIndex,让多个选项之间互斥,比如都设置为1就是互斥的;

    // 设置图标样式
    checkEdit2.Properties.CheckStyle = DevExpress.XtraEditors.Controls.CheckStyles.Radio;
    

CheckButton

  • 选中和未选中的两种状态按钮
  • 属性:Checked、GroupIndex、ImageOptions
  • 在黑色皮肤下效果明显
  • showFocusRectangle设置为false,不显示边框

ToggleButton

  • isOn :是否开
  • offText:关闭时文本
  • onText:打开时文本
  • ValueOff:关闭时EditValue值(若默认不修改状态还是false)
  • ValueOn:打开时EditValue值(若默认不修改状态还是true)
  • showText:是否显示文本
  • GlyphAlignment:文本水平显示位置,far显示在最前面
  • GlyphVerticalAlignment:文本垂直显示位置

MemoEdit

  • 多行文本框

  • MaxLength:设置最大长度,设置为0,不限制

  • Lines:录入的数据,返回值是string[] ,每行是数组的一个元素,以换行符为主,自动换行的不算一行;

  • EditValue:所有文本内容

  • Text:所有文本内容

  • AcceptsReturn:是否可以输入回车

  • AcceptsTab:是否可以输入tab

  • characterCasing:是否转换大小写

  • NullValuePrompt:没有输入内容时的水印效果

  • ScrollBars:滚动条,WordWrap为true时,水平滚动条无效

  • WordWrap:是否允许自动换行,默认true

  • 设置光标在最后

    memoEdit1.SelectionStart = memoEdit1.Text.Length;
    memoEdit1.ScrollToCaret();

SpinEdit

  • 数字控件
  • SpinEdit → BaseSpinEdit → PopopBaseEdit → ButtonEdit → TextEdit → BaseEdit → BaseControl → ControlBase → Control
  • IsFloatValue:是否允许小数
  • Increment:步长
  • MaxValue:最大值
  • MinValue:最小值
  • Value:获取值时不建议用EditValue,建议用这个,有类型decimal
  • SpinButtonIndex:设置spin的位置索引,0,在前,1在后
  • Buttons:SpinButton必须要有一个位置,所以Button设置时必须多一个才可以显示,可以通过ButtonClick事件来触发,参考ButtonEdit,因为他是ButtonEdit的子类
  • TextEditStyle:设置为DisableTextEditor,只允许上下选择,不允许编辑

DateEdit

  • 日期编辑器

  • DateEdit → PopopBaseEdit → ButtonEdit → TextEdit → BaseEdit → BaseControl → ControlBase → Control

  • DateTime:获取或设置时间值

  • CalendaView设置为TouchUI,可以显示不一样的时间选择器,设置成Classic,才能显示今天按钮

  • ColumnCount:横向显示几个月,若设置成3,则会显示当前月、下月、下下月

  • RowCount:竖向显示几个月

  • FirstDayOfWeek:设置每周的第一天

  • ShowWeekNumers:是否显示第几周

  • Properties.AppearanceCalendar.DayCellSelected:可以设置选中后日期的颜色

  • AllowClickInactiveDays :设置为True,则只能选择当月的,不能显示临近灰色部分

  • 设置常用格式

    // 设置系统日期
    dateEdit1.DateTime = DateTime.Now;
    // 设置显示的日期格式
    dateEdit1.Properties.DisplayFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
    dateEdit1.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
    // 设置编辑时的日期格式
    dateEdit1.Properties.EditFormat.FormatString = "yyyy-MM-dd HH:mm:ss";
    dateEdit1.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
    dateEdit1.Properties.Mask.EditMask = "yyyy-MM-dd HH:mm:ss";
    // 不允许清空
    dateEdit1.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.False;
    
    // 如果要显示时间需要设置VistaDisplayMode=true, VistaEditTime=true。
    // 意思为显示时间,在时间控件中会出现时钟图标,并可以编辑时间
    dateEdit1.Properties.VistaDisplayMode = DevExpress.Utils.DefaultBoolean.True;           
    dateEdit1.Properties.VistaEditTime = DevExpress.Utils.DefaultBoolean.True;
    
    // 设置显示的时间格式
    dateEdit1.Properties.VistaTimeProperties.DisplayFormat.FormatString = "HH:mm";
    dateEdit1.Properties.VistaTimeProperties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
    dateEdit1.Properties.VistaTimeProperties.EditFormat.FormatString = "HH:mm";
    // 设置编辑时的时间格式
    dateEdit1.Properties.VistaTimeProperties.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
    dateEdit1.Properties.VistaTimeProperties.Mask.EditMask = "HH:mm";
    
    // 设置可选择日期的范围
    dateEdit1.Properties.MinValue = DateTime.Now.AddDays(-30);
    dateEdit1.Properties.MaxValue = DateTime.Now.AddDays(30);
    
    // 单选的日期范围
    DateTime start = calendarControl1.SelectedRanges.Start; // 选中日期的0点
    DateTime end = calendarControl1.SelectedRanges.End;     // 选中日期24点
    
    // 设置系统日期
    dateEdit1.DateTime = DateTime.Now;
    dateEdit1.Properties.DisplayFormat.FormatString = "yyyy-MM";
    dateEdit1.Properties.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
    dateEdit1.Properties.EditMask = "yyyy-MM";
    dateEdit1.Properties.EditFormat.FormatString = "yyyy-MM";
    dateEdit1.Properties.EditFormat.FormatType = DevExpress.Utils.FormatType.DateTime;
    dateEdit1.Properties.Mask.EditMask = "yyyy-MM";
    // 日期的显示样式,YearView只显示一年内的月
    dateEdit1.Properties.VistaCalendarViewStyle = VistaCalendarViewStyle.YearView;
    dateEdit1.Properties.VistaCalendarViewStyle = VistaCalendarViewStyle.YearView;
    

TimeEdit

  • 时间编辑器,和SpinEdit是兄弟
  • TimeEdit → BaseSpinEdit → PopopBaseEdit → ButtonEdit → TextEdit → BaseEdit → BaseControl → ControlBase → Control
  • Time:设置和获取时间
  • TextEditStyle:可以设置是否允许编辑
  • TimeEditStyle:设置为TouchUI,可以显示不一样的时间选择器
  • TouchUIMinuteIncrement:分钟增加数,比如设置成10,只显示10,20,30...
  • TouchUIMaxValue:最大值
  • TouchUIMinValue:最小值
  • TouchUISecondIncerement:秒增加数,比如设置成10,只显示10,20,30...

FontEdit

  • 使用下拉框显示字体
  • FontEdit → ComboxEdit → PopupBaseAutoSearchEdit → PopupBaseEdit → ButtonEdit → TextEdit → BaseEdit → BaseControl → ControlBase → Control
  • EditValue:获取和设置属性
  • SelectedItem:

ColorEdit

  • 使用下拉框选择颜色
  • ColorEdit → PopopBaseEdit → ButtonEdit → TextEdit → BaseEdit → BaseControl → ControlBase → Control
  • Color:获取和设置属性
  • ColorDialogType:在自定义最下面两行空白的栏位右键可以打开颜色选择器;默认是高级的,若这里选择simple,则会出现一个简约风格的颜色选择框
  • CustomeColor:空余十六个栏位,就是自定义颜色下面自带的空白栏位;
  • ColorAlignment:设置颜色的值和颜色相对的位置,选择Near就是常用的;
  • ShowXXX:设置一些显示的属性,比如不显示网络颜色,可以将ShowWebColors设置为false

CalcEdit

  • 使用下拉框计算数据
  • CalcEdit → PopopBaseEdit → ButtonEdit → TextEdit → BaseEdit → BaseControl → ControlBase → Control
  • EditValue:获取值

CalendarControl

  • 显示月历并允许用户选择日期或者日期范围

  • 设置和日期组件相似

  • CalendarTimeEditing:设为true,可以修改日期

  • ShowXXX:可以修改显示的一些属性,如想显示今天和清除按钮,则必须CalendaView设置为Classic,在CalendaView的不同模式下会有不同的效果;

  • DrawCellLines:设置是否显示网格线

  • SelectionMode:设置成Multiple,按住shift可以多选

    // 单选的日期范围
    DateTime start = calendarControl1.SelectedRanges.Start; // 选中日期的0点
    DateTime end = calendarControl1.SelectedRanges.End;     // 选中日期第24点
    
    // 多选的日期范围
    DateTime start = calendarControl1.SelectedRanges.Start; // 选中第一个日期的0点
    DateTime end = calendarControl1.SelectedRanges.End;     // 选中第二个日期的24点
    

CheckedListBoxControl

  • CheckedListBoxControl:数据显示控件,该控件以列表框的形式显示复选列表;

    • 里面可以存放很多的CheckedListBoxItem

    • // 初始化一个选择框控件
      private void InitCheckedListBox()
      {
          CheckedListBoxItem[] cklbs = {
              new CheckedListBoxItem("1", "篮球", CheckState.Checked),
              new CheckedListBoxItem("2", "足球", CheckState.Unchecked),
              new CheckedListBoxItem("3", "乒乓球", CheckState.Unchecked),
              new CheckedListBoxItem("4", "羽毛球", CheckState.Unchecked),
              new CheckedListBoxItem("5", "橄榄球", CheckState.Unchecked)
          };
          cklbControl.Items.AddRange(cklbs);
          // 选中即点击,否则需要点两次
          cklbControl.CheckOnClick = true;
          // 根据高度先排列,后根据宽度横向排列,显示不选的显示横向滚动条
          cklbControl.MultiColumn = true;           
      }
      
    • // 1、 给checkedListBoxControl绑定数据源:
          checkedListBoxControl.DataSource = listRole;
          checkedListBoxControl.DisplayMember = "roleName";
          checkedListBoxControl.ValueMember = "ID"; 
      // 2、打钩checkedListBoxControl控件里的某一项:
      	checkedListBoxControlRole.SetItemChecked(i, true); //i是控件的索引值
      // 3、获取checkedListBoxControl控件里某一项的ValueMember值
      	checkedListBoxControlRole.GetItemValue(i).ToString();//i是控件的索引值
      // 4、实现checkedListBoxControl控件点击一次就可以选中复选框,设置CheckOnClick属性为true,即可。
      // 5、获取所有的选中项        
         var items = checkedListBoxControl1.CheckedItems;
      

ComboxEdit

  • 类继承图:DevExpress.XtraEditors.ComboBoxEdit

    • ComboxEdit → PopupBaseAutoSearchEdit → PopupBaseEdit → ButtonEdit → TextEdit → BaseEdit → BaseControl → ControlBase → Control
  • 常见属性

    • EditValue

    • Text

    • Items

    • SelectedItem

    • SelectedIndex

    • SelectedText

      if (cbeClass.SelectedIndex >= 0)
      {
          Msg.Show("Text:"+cbeClass.Text + Environment.NewLine+ "SelectSelectedText:" + cbeClass.SelectedText + Environment.NewLine +
                   "SelectedItem:" + cbeClass.SelectedItem + Environment.NewLine +
                   "SelectedIndex:" + cbeClass.SelectedIndex + Environment.NewLine +
                   "EditValue" + cbeClass.EditValue);
      }
      
  • 数据绑定方式comboBoxEdit1.Properties.Items.Add(object item)

    string sql = "select class_name from bill_item_class_dict";
    DataTable dt = OracleHelper.GetDataBySql(sql);
    // 清除所有项
    cbeClass.Properties.Items.Clear();
    if (dt.Rows.Count > 0)
    {
        foreach (DataRow row in dt.Rows)
        {
            cbeClass.Properties.Items.Add(row[0]);
        }
        // 默认选择第一项
        cbeClass.SelectedIndex = 0;
    }
    
  • 常用事件SelectedIndexChanged

  • 绑定键值对

    // 1、定义一个实体类
    public class ComboxList
    {
        public string Text { get; set; }
        public string Value { get; set; }
    
        // 必须重写该方法,否则下拉框内显示类名
        public override string ToString()
        {
            return Text;
        }
    }
    
    // 2、绑定数据
    string sql = "select class_name value,CLASS_CODE key from bill_item_class_dict";
    DataTable dt = OracleHelper.GetDataBySql(sql);
    // 清除所有项
    cbeClass.Properties.Items.Clear();
    if (dt.Rows.Count > 0)
    {
    
        foreach (DataRow row in dt.Rows)
        {
            ComboxList cbList=  new ComboxList() { Text = row[0].ToString(), Value = row[1].ToString() };
            cbeClass.Properties.Items.Add(cbList);
        }
    
        // 默认选择第一项
        cbeClass.SelectedIndex = 0;
    }
    
    // 3、获取数据
    ComboxList comboxList = cbeClass.SelectedItem as ComboxList;
    Msg.Show(comboxList.Text+":" + comboxList.Value);
    

CheckedComboxEdit

  • 可以在下拉复选框中选中多个项,选后,点击确定或收缩下拉框,选择的值显示在编辑框中,以分隔符分隔

  • 类继承图:DevExpress.XtraEditors.CheckedComboBoxEdit

    • CheckedComboBoxEdit → PopupContainerEdit → PopupBaseEdit → ButtonEdit → TextEdit → BaseEdit → BaseControl → ControlBase → Control
  • Text 、 AllowMultiSelect 、DataSource DisplayMemberValueMember 、SelectAllItemCaption、 SeparatorChar、 ShowButtons

  • 如果绑定数据是string,不用指定 DisplayMemberValueMember

  • 如果设置绑定,添加项无效

  • // 数据绑定
    checkedComboBoxEdit1.Properties.DisplayMember = "VALUE";  // 西药
    checkedComboBoxEdit1.Properties.ValueMember = "KEY";      // A
    checkedComboBoxEdit1.Properties.DataSource = dt;
    //是否显示 确定、取消按钮  , 但是还会有一个小x号
    checkedComboBoxEdit1.Properties.ShowButtons = false; 
    //是否显示 取消按钮  不会有小x号
    checkedComboBoxEdit1.Properties.ShowPopupCloseButton = false;
    // 将(选择所有) 修改为:全选
    checkedComboBoxEdit1.Properties.SelectAllItemCaption = "全选";
    // 将多选项的分隔符号修改为  |
    checkedComboBoxEdit1.Properties.SeparatorChar = '|';
    // 修改此项可以设置为是否允许用户编辑DisableTextEditor(不允许,默认),Standard(允许编辑)
    checkedComboBoxEdit1.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;
    // 当修改为list ,EditValue 返回的是个List,但不影响Text 属性
    checkedComboBoxEdit1.Properties.EditValueType = DevExpress.XtraEditors.Repository.EditValueTypeCollection.List;
    
    // 数据获取
    checkedComboBoxEdit1.EditValue.ToString();  // A
    checkedComboBoxEdit1.Text;				    // 西药
    
    

LookUpEdit

  • 类图:DevExpress.XtraEditors.LookUpEdit

    • LookUpEdit→ LookUpEditBasePopupBaseAutoSearchEdit → PopupBaseEdit → ButtonEdit → TextEdit → BaseEdit → BaseControl → ControlBase → Control
  • Text、EditValue、DataSource DisplayMemberValueMember 、ImmediatePopup、AutoSearchColumnIndex、SearchMode

  • 获取值

    string id = this.lookUpEdit1.EditValue.ToString(); //是lookUpEdit.Properties.ValueMember的值
     
    string name = this.lookUpEdit1.Text.Trim(); //是lookUpEdit.Properties.DisplayMember的值
     
    
  • SearchMode:

    • OnlyInPopup:配合ImmediatePopup=true使用,并根据输入的字符从头部开始匹配AutoSearchColumnIndex属性指定栏位字段的值,默认为第一栏位0

    • AutoComplete,配合ImmediatePopup=true使用,并在输入框自动完成你想要输入的数据,同时下拉窗体自动匹配最佳记录,这个值匹配DisplayMember对应的字段。特点:能在输入框显示匹配的数据,并且下拉窗体显示匹配的记录

    • AutoFiler : 配合ImmediatePopup=true使用,并在输入框自动完成你想要输入的数据,同时下拉窗体自动过滤不匹配的记录。这个值匹配DisplayMember对应的字段。特点:能过滤掉不想要的数据,自动过滤掉不匹配的数据

      // lookUpEdit1
      lookUpEdit1.Properties.DisplayMember = "CLASS_NAME"; // 可以不指定,但是影响Text
      lookUpEdit1.Properties.ValueMember = "CLASS_CODE"; // 可以不指定,但是影响 EditValue
      lookUpEdit1.Properties.DataSource = dt;
      // 修改此项可以设置为是否允许用户编辑DisableTextEditor(不允许,默认),
      // Standard(允许编辑) ,但是必须是下拉框内数据,否则清空编辑器
      lookUpEdit1.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;
      
      

RepositoryItemLookUpEdit

  • 下拉框

  • public class ComboxList
    {
        public string ItemCode { get; set; }
        public string ItemName { get; set; }
    
        public ComboxList(string itemCode, string itemName)
        {
            ItemCode = itemCode;
            ItemName = itemName;
        }
    }
    
    BindingList<ComboxList> blSummaryType = new BindingList<ComboxList>() {
        new ComboxList("0","Sum"),
        new ComboxList("1","Min"),
        new ComboxList("2","Max"),
        new ComboxList("3","Count"),
        new ComboxList("4","Average"),
        new ComboxList("5","Custom"),
        new ComboxList("6","None")
    };
    
    RepositoryItemLookUpEdit riluSummaryType = new RepositoryItemLookUpEdit()
    {
        DataSource = blSummaryType,
        DisplayMember = "ItemName",
        ValueMember = "ItemCode",
        NullText = ""
    };
    riluSummaryType.Columns.AddRange(new DevExpress.XtraEditors.Controls.LookUpColumnInfo[] {
        new DevExpress.XtraEditors.Controls.LookUpColumnInfo("ItemCode","代码",30),
        new DevExpress.XtraEditors.Controls.LookUpColumnInfo("ItemName","名称",70),
    });
    gridView2.Columns["SummaryType"].ColumnEdit = riluSummaryType;
    

RepositoryItemGridLookUpEdit

  • 和RepositoryItemLookUpEdit不同之处在于他具有Grid的属性,可以多列,可以点击表头的小漏斗过滤数据

  • 使用方法

RepositoryItemGridLookUpEdit riluFormatType = new RepositoryItemGridLookUpEdit()
{
    DataSource = blFormatType,
    DisplayMember = "ItemName",
    ValueMember = "ItemCode",
    NullText = ""
};
GridColumn riglupgcId = riluFormatType.View.Columns.AddField("ItemCode");
riglupgcId.Caption = "编号";
riglupgcId.VisibleIndex = 0;
riglupgcId.Width = 30;
GridColumn riglupgcName = riluFormatType.View.Columns.AddField("ItemName");
riglupgcName.Caption = "名称";
riglupgcName.VisibleIndex = 1;
riglupgcName.Width = 70;
riluFormatType.View.Columns.Add(riglupgcId);
riluFormatType.View.Columns.Add(riglupgcName);
gridView2.Columns["FormatType"].ColumnEdit = riluFormatType;

ListBoxControl

  • DataSource---------数据源

  • DisplayMember-----默认显示成员

    • 这两个属性是listBoxControl和checkedListBoxControl绑定数据必须要设置的数据,如果不设置,绑定的是对象的话,需要重写ToString方法

      
      
  • SelectionMode-----选择方式(单选/多选)这个属性listBoxControl比较常用,checkedListBoxControl一般不用设置

  • SelectedItem------选中项

  • SelectedValue-----选中值

  • 这两个方法都是用于获取单一选中项的,放回的都是DataRowView类型的对象,如果多选,一般返回第一个对象

  • DataRowView的Row属性可以返回一个DataRow类型的对象

  • SelectedItems-----多个选中项

  • Items:当控件未绑定到数据源时,提供对项集合的访问。 也就是说指定DataSource时访问该属性无效;因为在绑定模式下,控件的控件的BaseCheckedListBoxControl.Items集合为空,不能用于访问单个列表框项。要获取列表框项目,请使用BaseListBoxControl.GetItem方法。

  • ItemCount :获取列表框控件的集合中包含的元素数。

RadioGroup

  • Properties -- Items:显示的内容
  • RadioGroup默认项竖排修改为横排显示:Properties -- Columns :修改columns的值即可,实现横排显示
  • 获取值:radioGroup1.Properties.Items[radioGroup1.SelectedIndex].Value.ToString();
  • 默认选中项:SelectedIndex属性修改为-1,则默认不选中任一项,修改为0则默认选中第一项,以此类推。

三、高级控件

LayoutContol

  • LayoutControl是一个项目容器,将这些项目安排在一行或一列中。

  • LayoutControl是DevExpress的布局管理器库的主要组成部分。它允许您在表单中排列任何控件,而不会重叠或者未对齐。自动生成一个 LayoutControlGroup,可以调整layoutControlGroup2.Padding = new DevExpress.XtraLayout.Utils.Padding(5)来设置距离四边的偏移量

  • 当您将控件拖放到LayoutControl上时,添加的控件会自动被包装到LayoutControlItem中,LayoutControl直接利用它来进行布局。向LayoutControl中添加控件时,默认会转换成LayoutControlItem,每个LayoutControlItem会包含一个标签和控件本身。相当于LayoutControl给添加的空间增加了一个标签组合成一个新的控件。

  • 可以统一设置控件中文字到控件的间距。layoutControl1.OptionsItemText.TextToControlDistance = 50;

  • 统一设置控件和文字之间的间距模式:layoutControl.OptionsItemText.TextAlignMode = DevExpress.XtraLayout.TextAlignMode.AutoSize;

  • 可以设置这个属性为true,显示边框线:layoutControlGroup2.GroupBordersVisible = true;

  • LayoutControl

    • AllowCustomization:设置为false,这样运行中就不会有右键菜单了;
    • AutoScroll:控件超出容器后不显示滚动条
  • LayoutControlGroup:

    • Text:设置文本,同时设置TextVisible=true,GroupBordersVisible=true将会显示组标签
    • 折叠:当出现组标签时,可以通过设置以前属性来配合折叠效果
      • ExpanButtonMode:Normal向上箭头,Inverted:向下箭头
      • ExpandButtonVisible:是否显示折叠按钮
      • Expanded:默认状态是否允许展开
      • ExpandOnDoubleClick:设为true,可以双击组标签任意位置进行折叠
    • TextLocation:设置组标签的位置
    • AllowBorderColorBlending:设置为true时,可以通过AppearanceGroup的BorderColor设置边框颜色,包括组标签的背景色
    • LayoutMode:
      • 设置为Regular
      • 设置为Table。设置layoutgroup的OptionsTableLayoutGroup这个属性里的行和列设置一下就可以控制行数和列数,以及每行和每列的大小。
      • 可以通过LayoutControlItem的OptionTableLayoutItem设置该item的位置以及占几行几列。ColumnIndex:从第几列开始,RowIndex:从第几行开始,ColumnSpan:占几列,RowSpan占几列
  • LayoutControlItem:

    • Text:设置标签颜色,
    • TextAlignMode:标签对齐方式,
    • TextLocation:相对于控件的位置;
    • TextVisible:设置是否显示文本
    • TextToControlDistance:文字离控件的距离;
    • Spacing:设置左右上下空间,和padding设置一个即可
    • ImageOption下的Image:可以设置图片,ImageToTextDistance指定图片离文本的距离
  • 通过语句创建

     // 创建一个LayoutControl面板
    LayoutControl lc = new LayoutControl
    {
        // 布局整个页面
        Dock = DockStyle.Fill
    };
    // 将LayoutControl面板加入到控件中
    this.Controls.Add(lc);
    
    // 创建一个子项
    LayoutControlItem item1 = lc.Root.AddItem();
    // 创建一个文本编辑器
    TextEdit textEdit = new TextEdit();
    textEdit.Name = "txtName";
    item1.Name = "LayoutItem1";
    item1.Text = "姓名";
    item1.Control = textEdit;
    item1.Padding = new DevExpress.XtraLayout.Utils.Padding(10);
    
    // 创建一个子项
    LayoutControlItem item2 = new LayoutControlItem
    {
        // 设置子项的父亲
        Parent = lc.Root,
        Name = "LayoutItem2"
    };
    Control textBox2 = new TextEdit();
    textBox2.Name = "txtEmail";
    item2.Control = textBox2;
    item2.Text = "电子邮件";
    item2.Padding = new DevExpress.XtraLayout.Utils.Padding(10);
    
    // Create a layout item.
    LayoutControlItem item3 = new LayoutControlItem
    {
        Name = "LayoutItem3",
        Parent = lc.Root
    };
    Control textBox3 = new MemoEdit
    {
        Name = "TextBox3"
    };
    item3.Control = textBox3;
    item3.Text = "我的简介";
    item3.Padding = new DevExpress.XtraLayout.Utils.Padding(10);
    
  • 操作步骤

    • 向窗体中添加LayoutControl控件

    • (1)添加GroupBox控件名为groupControl1,拖入后如图3所示,控件默认填充整个GroupControl,而且在界面中或者groupControl1的属性中是无法直接修改大小的。

    • (2)隐藏控件的layoutControlItem(Text)。在向LayoutControl中添加控件后,会默认在其左侧添加一个layoutControlItem,隐藏该部分的方法是右键layoutControlItem,点击【Hide Text】,隐藏后如图4所示。如想重新显示需要设置layoutControlItem → TextVisible → true

    • 修改groupControl1的尺寸。

      右键layoutControlGroup1(鼠标必须在该控件上右键),在弹出的菜单中点击【CustomizeLayout】→【Layout Tree View】→【layoutControlItem1】,如图5,6所示。

      (注意:在添加多个控件后会对应多个layoutControlItem代表序号,1,2,3...),修改某一个控件时,必须找到其对应的layoutControlItem*进行属性的修改)

BarManager

  • BarManager是一个菜单栏管理类,主要是在C#桌面应用中显示菜单栏的作用;

  • 创建一个BarManager后,会默认创建一个Bar

    this.barManager1 = new DevExpress.XtraBars.BarManager(this.components);
    this.menubar = new DevExpress.XtraBars.Bar();
    
  • 去掉最右侧的箭头this.bar1.OptionsBar.AllowQuickCustomization = false;

  • 去掉最左边的竖线this.bar1.OptionsBar.DrawDragBorder = false;

  • 取消右键菜单this.barManager1.AllowShowToolbarsPopup = false;

  • 隐藏和显示菜单

    if (this.barLargeButtonItem1.Visibility == DevExpress.XtraBars.BarItemVisibility.OnlyInCustomizing)
    {
        this.barLargeButtonItem3.Caption = "隐藏";
        this.barLargeButtonItem1.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
    }
    else
    {
        this.barLargeButtonItem3.Caption = "显示";
        this.barLargeButtonItem1.Visibility = DevExpress.XtraBars.BarItemVisibility.OnlyInCustomizing;
    }
    
  • 如何使toolbar显示图标方法之一是:放一个imagelist,里面放一些图在toolbar里建立一个barbuttonitem,然后选中这个item,在属性里为其imageindex分配一个imagelist里的图

  • 如何使statusbar里的各项可以自定义宽度使用statictext,把autosize改为none,然后即可调整width

  • 如何使item项目前加一个竖线选中item右键,启用组

XtraReports

  • XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示,因此,每个报表都作为带区的容器使用,而每个带区中都包含报表控件

  • XtraReports 中的每个报表都可以被绑定到数据,或者不绑定。要创建绑定报表,则首先要把报表绑定到数据源,然后指定每个报表控件的数据绑定选项。

  • 报表控件、带区 和报表自身的所有大小和位置,都以报表内相同的单位度量。 度量单位由报表的 XtraReport.ReportUnit 属性指定,可以设置为下列类型之一:百分之一英寸:当 ReportUnit 属性值被设置为 ReportUnit.HundredthsOfAnInch 时使用。 十分之一毫米:当 ReportUnit 属性值被设置为 ReportUnit.TenthsOfAMillimeter 时使用。

  • 页面构建时用到的事件

    • Before Print:

      在 预览/打印/导出 报表期间,在 XRControl 对象创建其图像之前,XRControl.BeforePrint 事件发生,主要用于以程序方式改变报表的属性、带区的属性、以及存放在 DetailBand 细节带区中的控件的属性。在此事件中可以执行大部分任务 (例如改变 XRControl.Visible、XRControl.BackColor、XRControl.BorderColor 以及其他属性),可以被轻松执行,而 无需编写代码,只是使用 格式设置规则。 此外,BeforePrint 事件可以被接管,从而重新指派控件的样式,并且调整其 XRControl.LocationF 属性。

    • 可以使用 XtraReportBase.GetCurrentColumnValue 方法为数据绑定控件获取数据列的当前值。

    • private void xrLabel1_BeforePrint(object sender, PrintEventArgs e)
      
      {
      
          if (Convert.ToDouble(this.GetCurrentColumnValue("UnitPrice")) > 30) {
      
              XRControl control = this.FindControl("xrLabel1", true);
      
              control.LocationF = new PointF(15F, 15F);
      
              control.Styles.Style = this.StyleSheet[0];
      
           }
      
      }
      
  • 报表结构

    整个报表是由多个绑定带区组成,绑定带区如下:

    绑定带区 说明
    TopMarginBand 每个页面上面都显示的空白(天头),在PageHeaderBand或者ReportHeaderBand上面
    ReportHeaderBand 在报表起始位置(报表头), 此带区被设计用于显示某些概述信息,例如报表的封面。
    PageHeaderBand 在每个页面的上方(页眉),在TopMarginBand或者ReportHeaderBand下方
    GroupHeaderBand 在每组的起始位置,或者在分跨多个页时而位于组的上方(分组标头)。 此带区指定分组标准,并被用于显示每组记录起始位置的信息
    DetailBand 在页面上所有其他带区之间(细节)。 此带区每行只显示绑定数据源中的一条记录,或者当没有为报表指定数据源时而简单地持有非绑定控件。
    DetailReportBand 在DetailBand的下方(从表),被设计用于在创建主/从报表时持有从报表
    GroupFooterBand 在每组的结束位置,或者在分跨多个页时而位于组的下方(分组脚注)。 此带区主要被设计用于显示每组的总结信息。
    ReportFooterBand 在报表结束位置(报表脚注)。 此带区被设计用于显示某些终极信息,例如报表总结。
    PageFooterBand 在每个页面的下方(页脚)在ReportFooterBand下方和BottomFooterBand上方,此带区被设计用于从之前页面接续的页码或表尾
    BottomMarginBand 每个页面底部的空白(地脚),在PageFooterBand的下方。
  • 报表常用属性

    属性 说明
    BackColor 设置报表控件的背景色
    Bands 报表包含的带区,用于放置各种控件(集合)
    BorderColor 报表中控件边框颜色
    BorderDashStyle 报表中控件边框样式
    Borders 报表中控件边框
    BorderWidth 边框宽度
    CalculatedFiled 计算字段,主要被用于 data-aware(数据感知) 报表中(集合)
    DataAdapter 数据源Adapter对象
    DataMember 数据源中用于绑定报表的具体表
    DataSource 报表数据源
    DataSourceSchema 指定数据源框架文件(XML/XSD文件)
    DesignerOptions ShowDesignerHints(bool):设计时显示提示ShowDesignerWarnings(bool):设计时显示警告提示ShowPrintingWarnings(bool):打印提示
    DetailPrintCount 设置打印的页数
    DetailPrintCountOnEmptyDataSource 当数据源为空时打印的次数
    DrawGrid(bool) 设置是否要绘制对齐网格
    ExportOptions 用于设置报表导出时的相关属性(集合)
    FilterString 报表数据过滤字符串
    PageColor 报表页面颜色
    FormattingRules 设置格式化样式
    FormattingSheet 格式化样式集合
    PagerKind 设置纸张类型
    Parameters 设置报表参数
    PrintOnEmptyDatasource(bool) 设置当数据源为空时是否打印
    RequestParameters(bool) 设置是否在参数Submit后再创建报表
    SnapGridSize 设置报表对齐网格大小
    SnappingModel 设置对齐模式(SnapToLines&SnapToGrid)
    SnapToGrid(bool) 设置是否对齐到网格
    StyleSheet 设置控件引用的样式
    StyleSheetPath 设置引用外部样式文件
    TextAlignment 设置报表字体对齐方式
    Watermark (属性集合)用于设置报表的水印,包括图片和文字
    XmlDataPath 设置数据源为Xml文件的数据源路径
  • 创建一个XtraReport

  • 在Form窗口中打开

XtraReportHelloWorld xtraReport = new XtraReportHelloWorld();
ReportPrintTool printTool = new ReportPrintTool(xtraReport);
// 普通打开
printTool.ShowPreview();
// 对话框方式打开
printTool.ShowPreviewDialog();
// 指定外观样式打开
printTool.ShowPreview(UserLookAndFeel.Default);

SplitContainerControl

  • SplitContainerControl实现界面分离,分为左右或者上下区域。
  • 默认是分左右区域。如果想要分上下区域,则把splitContainerControl对象的属性:Horizontal设置成False.

GridControl

  • 属性

    • Dock :在容器中如何填充
    • DataSource:设置数据源,如果定义列,列名对应的FiledName必须大写
    • LookAndFeel:
  • 事件

    • RowCellClick:将GridView的OptionsColumn.AllowEdit设置为false后左键可触发RowCellClick。不管这一列OptionsColumn.AllowEdit是不是false,只要这一列有MouseDown事件,就不会执行该列的RowCellClick事件。
  • 各种View

    • CardView

    • GridView

    • BandedGridView

    • AdvBandedGridView

      • advBandedGridView1.Columns["ENAME"].Caption = "员工编号";
        
        advBandedGridView1.Columns["ENAME"].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
        
        advBandedGridView1.Columns["ENAME"].AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center;
        
        advBandedGridView1.Columns["ENAME"].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
        
        advBandedGridView1.Columns["ENAME"].AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center;
        // 是否启用偶数行外观
        advBandedGridView1.OptionsView.EnableAppearanceEvenRow = true;
        // 是否启用奇数行外观
        advBandedGridView1.OptionsView.EnableAppearanceOddRow = true;
        // 设置Band所占的行数
        this.gridBand1.RowCount = 1;
        // 字段自动宽度
        advBandedGridView1.OptionsView.ColumnAutoWidth = true;
        
    • LayoutView

    • WinExplorerView

    • TitleView

1、如何显示行号

2、设置行样式,如变色

RowCellStyle 行单元格样式事件, 用于设置行单元格样式

void GridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
{
    // 单行变色,还是渐变色
    if (e.Column.FieldName == "UserType")
    {
        string status = this.winGridViewPager1.gridView1.GetRowCellValue(e.RowHandle, "UserType").ToString();

        if ("经理".Equals(status))
        {
            e.Appearance.BackColor = Color.Red;
            e.Appearance.BackColor2 = Color.LightCyan;
            e.Appearance.ForeColor = Color.White;
        }
        else if ("管理员".Equals(status))
        {
            e.Appearance.BackColor = Color.Yellow;
            e.Appearance.BackColor2 = Color.LightCyan;
            e.Appearance.ForeColor = Color.White;
        }
    }  
}
void GridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
{
    // 整行变色
    if (e.RowHandle >= 0)//当前视图的所有行
    {
        Users user = (Users)winGridViewPager1.gridView1.GetRow(e.RowHandle);//获取所以行的数据
        if (user == null) return;
        if ("经理".Equals(user.UserType))
        {
            e.Appearance.BackColor = Color.YellowGreen;                  
        }
    }
}
private void gridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
{
    // 隔行变色
    if (e.RowHandle%2==0)
    {
        e.Appearance.BackColor = Color.BlanchedAlmond;
    }
}

4、设置表头和表单

// 设置表头内容
advBandedGridView1.Columns["ENAME"].Caption = "员工编号";
// 设置表单内容 水平居中
advBandedGridView1.Columns["ENAME"].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
// 设置表单内容 垂直居中
advBandedGridView1.Columns["ENAME"].AppearanceCell.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center;
// 设置表头内容 垂直居中
advBandedGridView1.Columns["ENAME"].AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
// 设置表头内容 垂直居中
advBandedGridView1.Columns["ENAME"].AppearanceHeader.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center;
// 是否启用偶数行外观
advBandedGridView1.OptionsView.EnableAppearanceEvenRow = true;
// 是否启用奇数行外观
advBandedGridView1.OptionsView.EnableAppearanceOddRow = true;  
// 设置Band所占的行数
this.gridBand1.RowCount = 1;
// 字段自动宽度
advBandedGridView1.OptionsView.ColumnAutoWidth = true;

四、Excel导出

1、AsposeExcelTools

  • 这个导出去的样式不好看,仅仅是数据
  • 但是可以直接导出DataTable
private void barLargeButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
    string file = FileDialogHelper.SaveExcel(string.Format("{0}.xls", "医保类别"));
    if (!string.IsNullOrEmpty(file))
    { 
        try
        {
            string error = "";
            AsposeExcelTools.DataTableToExcel2(dataSource.Tables[0], file, out error);
            if (!string.IsNullOrEmpty(error))
            {
                Msg.ShowError(string.Format("导出Excel出现错误:{0}", error));
            }
            else
            {
                if (Msg.ShowConfirmYesNo("导出成功,是否打开文件?"))
                {
                    System.Diagnostics.Process.Start(file);
                }
            }
        }
        catch (Exception ex)
        {                   
            Msg.ShowError(ex.Message);
        }
    }
}

2、GridControl.ExportToXls

  • 这个导出去的样式好看,和GridControl看到的一样,并且带有过滤功能
  • 这个需要GridControl控件
private void Exp_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
    if (this.gridView1.RowCount > 0)
    {
        SaveFileDialog fileDialog = new SaveFileDialog
        {
            Title = "导出Excel",
            Filter = "Excel文件(*.xls)|*.xls"
        };
        DialogResult dialogResult = fileDialog.ShowDialog(this);
        if (dialogResult == DialogResult.OK)
        {
            //DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions();
            gridControl1.ExportToXls(fileDialog.FileName);
            if (Msg.ShowConfirmYesNo("保存成功!文件位置:" + fileDialog.FileName + Environment.NewLine + "是否打开"))
            {
                System.Diagnostics.Process.Start(fileDialog.FileName);
            }                    
        }
    }
    else
    {
        Msg.Show("没有需要导出的数据" );
    }

}

五、计划任务

1、Quartz.Net

  • Quartz.net:它是一个简单的执行任务计划的组件,基本包括这三部分:

    • Job(做业):须要在任务计划中执行的具体逻辑操做
    • Trigger(触发器):须要什么时间什么规则来去执行Job 做业
    • scheduler(调度器):将Job 和 Trigger 注册到 scheduler 调度器中,主要负责协调Job、Trigger 的运行工具
  • 在VS 中 工具 > NuGet 程序包管理器 > 程序包管理器 下载Quartz.net

  • 开发步骤

    • 1、继承作业接口IJob建立计划任务(有参)

      /// <summary>
      /// 1、继承作业接口IJob建立计划任务(有参)
      /// </summary>
      public class FirstJob : IJob
      {
          public const string JobKey = "Address";
          public Task Execute(IJobExecutionContext context)
          {
              return Task.Factory.StartNew(()=> {
                  // JobDataMap 获取参数
                  JobDataMap data = context.JobDetail.JobDataMap;
                  int jobAddress = data.GetIntValue(JobKey);
                  // 获取窗口的运行实例
                  var instance = (Form1)Application.OpenForms["Form1"];
                  Debug.WriteLine($"{Thread.CurrentThread.Name} 设备{jobAddress},数据{instance.Count},时间{DateTime.Now}");
                  instance.Count++;
              });
          }
      }
      
    • 2、通过调度器工厂创建默认的调度器Scheduler

    • 3、通过JobBuilder生成一个任务job

    • 4、通过TriggerBuilder建立一个触发器trigger

    • 5、将job和trigger加入到调度器Scheduler中

      private async void CreateJobWithParm(int address)
      {
          Debug.WriteLine($"创建【有参】任务,时间:{DateTime.Now}");
          // 2、通过调度器工厂创建默认的调度器Scheduler
          IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
          await scheduler.Start();
      
          // 3、通过JobBuilder生成一个任务job
          IJobDetail job1 = JobBuilder.Create<FirstJob>().WithIdentity($"Address{address}","groupB").Build();
      
          // 将参数加入到任务中
          job1.JobDataMap.Put(FirstJob.JobKey, address);
      
          // 4、通过TriggerBuilder建立一个触发器trigger
          ITrigger trigger = TriggerBuilder.Create().WithIdentity($"Address{address}", "groupB").StartNow().
              WithSimpleSchedule(x=>x.WithIntervalInSeconds(10) // 10秒执行一次
                                 .WithRepeatCount(10)) // 执行10次
              .Build();
      
          // 5、将job和trigger加入到调度器Scheduler中
          await scheduler.ScheduleJob(job1, trigger);
      }
      
    • 按钮中调用

      private async void btnJob1_Click(object sender, EventArgs e)
      {
          IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
          JobKey key = JobKey.Create($"Address1","Drip");
          var exist = await scheduler.CheckExists(key);
          if (exist)
          {
              MessageBox.Show("当前已运行Job:1");
          }
          else
          {
              CreateJobWithParm(1);
          }
      }
      
    • 额外知识:计算时间差

      // 计算时间差的方法
      // TotalDays 		将TimeSpan结构所表示的时间间隔换算成等效天数。
      // TotalHours 		将TimeSpan结构所表示的时间间隔换算成等效小时数。
      // TotalMinutes 	将TimeSpan结构所表示的时间间隔换算成等效分钟数。
      // TotalSeconds 	将TimeSpan结构所表示的时间间隔换算成等效秒数数。
      // TotalMilliseconds 将TimeSpan结构所表示的时间间隔换算成等效毫秒数。
      
      private int DateDiff(DateTime DateTime1, DateTime DateTime2)
      {
          int dateDiff = 0;
          // Ticks : 表示多少个一百纳秒(计算机的一个计时单位)。
          TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
          TimeSpan ts2 = new
              TimeSpan(DateTime2.Ticks);
          TimeSpan ts = ts1.Subtract(ts2).Duration();
          // dateDiff = ts.Days.ToString()+"天"+ ts.Hours.ToString()+"小时"+ ts.Minutes.ToString()+"分钟"+ ts.Seconds.ToString()+"秒";
          dateDiff = ts.Minutes;
          return dateDiff;
      }
      

六、其他知识点

1、获取当前运行的路径

Application.StartupPath : 获取当前应用程序所在目录的路径,最后不包含“\”;
Application.ExecutablePath : 获取当前应用程序文件的路径,包含文件的名称;
AppDomain.CurrentDomain.BaseDirectory : 获取当前应用程序所在目录的路径,最后包含“\”;
System.Threading.Thread.GetDomain().BaseDirectory : 获取当前应用程序所在目录的路径,最后包含“\”;
Environment.CurrentDirectory : 获取当前应用程序的路径,最后不包含“\”;
System.IO.Directory.GetCurrentDirectory:获取当前应用程序的路径,最后不包含“\”;