DEVexpress SearchLookUpEdit展示效果

2024-08-24 08:38

本文主要是介绍DEVexpress SearchLookUpEdit展示效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、选择用户的控件封装操作

在一些系统模块里面,我们需要选择系统人员作为经办人员的操作,如下面几个界面场景所示。

DevExpress Winforms 控件封装
DevExpress Winforms 控件封装

我们注意到,一般在我们选择的时候,界面会弹出一个新的层给我们选择,里面通过列表详细展示相关的信息,还可以支持搜索,非常方便。

当我们完成选择的时候,我们看到界面会只有一个人员名称的显示,不占用额外的地方显示。

DevExpress Winforms 控件封装

这种界面效果是如何实现的呢?下面进行详细的介绍。

1)首先我们定义一个自定义控件,让其继承自XtraUserControl 即可。

1
2
3
4
5
/// <summary>
     /// 经办人员、操作人员的选择控件封装
     /// </summary>
     public partial class OperatorSelectControl : XtraUserControl
     {

2)然后在DevExpress的界面工具箱上拖动一个SearchLookUpEdit 控件到我们新的用户控件OperatorSelectControl 上。

DevExpress Winforms 控件封装

调整好用户界面控件的排版相关属性,就会得到下面的界面所示。

DevExpress Winforms 控件封装

3)在设计视图里面,我们为这个SearchLookUpEdit控件的GridView设置它的显示字段,如下所示,每个字段主要绑定FieldName(属性或者字段)和Caption(显示名称)。

DevExpress Winforms 控件封装

这些必备的处理操作完成后,我们可以通过代码或者设计器把这个控件的显示内容和存储内容进行设定,并绑定它的数据源即可(根据需要调用自己的函数),如下所示。

1
2
3
4
5
6
7
8
9
private void OperatorSelectControl_Load(object sender, EventArgs e)
         {
             if (! this .DesignMode)
             {
                 txtOperator.Properties.ValueMember = "ID" ;
                 txtOperator.Properties.DisplayMember = "FullName" ;
                 txtOperator.Properties.DataSource = SecurityHelper.GetSimpleUsers();
             }
         }

4)我们为了方便,还可以进一步处理控件的显示内容和返回的值内容,我们希望绑定值或者获取值的时候,使用Text属性就可以了,那么我们重载一下这个自定义控件的Text属性即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public override string Text
         {
             get
             {
                 string result = "" ;
                 if ( this .txtOperator.EditValue != null )
                 {
                     result = this .txtOperator.EditValue.ToString();
                 }
                 return result;
             }
             set
             {
                 this .txtOperator.EditValue = value;
             }
         }

5)这样控件的操作就完成了,编译代码后,我们在工具箱上就可以看到最新的控件图标了。

DevExpress Winforms 控件封装

接着我们把相关的控件拖动到需要的地方(如果是界面和控件在相同的工程里面,注意需要移除重复的工程引用),重新编译系统代码,那么本文开始的界面效果就可以出现了

2、会员卡级别选择操作

刚才说了,人员选择可以使用这种弹出列表选择的方式,其实很多地方可以用这个方式来进行选择,如一些相对比较少记录的信息就很适合这种显示方式,比如在会员管理里面的,会员卡级别的选择,也可以采用这种方式。

DevExpress Winforms 控件封装
DevExpress Winforms 控件封装

这个模块的做法也和第一种很类似,有点不同的是,我需要选择后把会员卡的折扣也关联显示出来,那我们应该如何处理呢?

1)定义控件和事件处理

为了方便在控件选择后进行事件的触发处理,我在这里定义了一个事件处理器SelectedValueChanged。

1
2
3
4
5
6
7
8
9
/// <summary>
     /// 卡级选择控件
     /// </summary>
     public partial class CardGradeSelectControl : XtraUserControl
     {
         /// <summary>
         /// 选择项发生变化的事件处理
         /// </summary>
         public event EventHandler SelectedValueChanged;

然后在内部控件的EditValue改变的时候,在其中的事件里面触发我们自定义的事件即可, 如下所示。

1
2
3
4
5
6
7
private void txtCardGrade_EditValueChanged(object sender, EventArgs e)
         {
             if (SelectedValueChanged != null )
             {
                 SelectedValueChanged(sender, e);
             }
         }

2)在窗体界面中自定义控件的事件调用

在会员编辑界面里面,我们对这个卡级别的选择控件的自定义事件进行处理即可。

处理事件里面,我们获取对应卡级别的优惠折扣(GetDiscountByGradeNo),然后绑定到界面的控件显示即可,这样就实现了联动效果了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public partial class FrmEditMember : BaseEditForm
     {
         /// <summary>
         /// 创建一个临时对象,方便在附件管理中获取存在的GUID
         /// </summary>
         private MemberInfo tempInfo = new MemberInfo();
         public FrmEditMember()
         {
             InitializeComponent();
             this .txtCardGrade.SelectedValueChanged += new EventHandler(txtCardGrade_SelectedValueChanged);
         }
         void txtCardGrade_SelectedValueChanged(object sender, EventArgs e)
         {
             string gradeNo = txtCardGrade.Text;
             if (!string.IsNullOrEmpty(gradeNo))
             {
                 this .txtDiscount.Value = BLLFactory<cardgrade>.Instance.GetDiscountByGradeNo(gradeNo);
             }
         }</cardgrade>

3、创建人员和创建时间的显示处理

在我们窗体数据的编辑界面里面,为了友好显示,我们可能需要显示数据的创建人和创建时间。这种效果是如何实现的,我们来看看。

DevExpress Winforms 控件封装

1)数据显示时候处理

数据显示的时候,可能是新增界面的显示,也可以是现有记录的显示,我们需要区分对待。

如果是已有数据,我们需要解析创建人员的ID,显示已有时间即可;如果是新增界面,那么我们把当前登陆用户的名称显示出来,及显示当前时间即可。

在设计模式里面,把控件设置为ReadOnly=true,不用编辑修改控件的值即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/// <summary>
         /// 数据显示的函数
         /// </summary>
         public override void DisplayData()
         {
             InitDictItem(); //数据字典加载(公用)
             if (!string.IsNullOrEmpty(ID))
             {
                 #region 显示信息
                 MemberInfo info = BLLFactory<whc.member.bll.member>.Instance.FindByID(ID);
                 if (info != null )
                 {
                     tempInfo = info; //重新给临时对象赋值,使之指向存在的记录对象
                     txtHandNo.Text = info.HandNo;
                     txtCardNo.Text = info.CardNo;
                     txtCardCode.Text = info.CardCode;
                     txtCardStatus.SetComboBoxItem(info.CardStatus.ToString());
                     txtOpenUser.Text = info.OpenUser;
..............
                     txtCreator.Text = SecurityHelper.GetFullNameByID(info.Creator);
                     txtCreateTime.SetDateTime(info.CreateTime);
                 }
                 #endregion            
             }
             else
             { this .txtOpenDate.DateTime = DateTime.Now;
                 this .txtHandNo.Text = IDUtils.NewId();
                 this .txtCreateTime.DateTime = DateTime.Now;
                 this .txtCreator.Text = LoginUserInfo.FullName; //默认为当前登录用户
             }
             this .portraitControl1.MemberID = tempInfo.ID;
             this .portraitControl1.BindPicture(tempInfo.ID);
             //tempInfo在对象存在则为指定对象,新建则是全新的对象,但有一些初始化的GUID用于附件上传
             SetAttachInfo(tempInfo);
         }</whc.member.bll.member>

但用户保存操作的时候,如果是新增数据,我们需要把当前时间和当前用户的信息记录到数据库里面,因此需要增加一些代码进行数据的关联处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/// <summary>
         /// 新增状态下的数据保存
         /// </summary>
         /// <returns></returns>
         public override bool SaveAddNew()
         {
             MemberInfo info = tempInfo; //必须使用存在的局部变量,因为部分信息可能被附件使用
             SetInfo(info);
             info.Creator = LoginUserInfo.ID.ToString();
             info.CreateTime = DateTime.Now;
             info.Dept_ID = LoginUserInfo.DeptId;
             info.Company_ID = LoginUserInfo.CompanyId;
             try
             {
                 #region 新增数据
                 //检查是否还有其他相同关键字的记录
                 bool exist = BLLFactory<whc.member.bll.member>.Instance.IsExistKey( "CardNo" , info.CardNo);
                 if (exist)
                 {
                     MessageDxUtil.ShowTips( "指定的【会员卡号】已经存在,不能重复添加,请修改" );
                     return false ;
                 }
                 bool succeed = BLLFactory<whc.member.bll.member>.Instance.Insert(info);
                 if (succeed)
                 {
                     //可添加其他关联操作
                     return true ;
                 }
                 #endregion
             }
             catch (Exception ex)
             {
                 LogTextHelper.Error(ex);
                 MessageDxUtil.ShowError(ex.Message);
             }
             return false ;
         }</whc.member.bll.member></whc.member.bll.member>

我们为了方便,一般是在数据库存储人员的ID,但是列表显示的时候,我们也就需要把对应的人员ID转换为人员名称了。

1
this .winGridViewPager1.gridView1.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(gridView1_CustomColumnDisplayText);
1
2
3
4
5
6
7
8
9
10
void gridView1_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
         {
             if (e.Column.FieldName == "Operator" || e.Column.FieldName == "Editor" || e.Column.FieldName == "Creator" )
             {
                 if (e.Value != null )
                 {
                     e.DisplayText = SecurityHelper.GetFullNameByID(e.Value.ToString());
                 }
             }
         }

这篇关于DEVexpress SearchLookUpEdit展示效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101986

相关文章

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

uniapp小程序中实现无缝衔接滚动效果代码示例

《uniapp小程序中实现无缝衔接滚动效果代码示例》:本文主要介绍uniapp小程序中实现无缝衔接滚动效果的相关资料,该方法可以实现滚动内容中字的不同的颜色更改,并且可以根据需要进行艺术化更改和自... 组件滚动通知只能实现简单的滚动效果,不能实现滚动内容中的字进行不同颜色的更改,下面实现一个无缝衔接的滚动

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用