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

相关文章

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

起点中文网防止网页调试的代码展示

起点中文网对爬虫非常敏感。如图,想在页面启用调试后会显示“已在调试程序中暂停”。 选择停用断点并继续运行后会造成cpu占用率升高电脑卡顿。 经简单分析网站使用了js代码用于防止调试并在强制继续运行后造成电脑卡顿,代码如下: function A(A, B) {if (null != B && "undefined" != typeof Symbol && B[Symbol.hasInstan

【Godot4.3】多边形的斜线填充效果基础实现

概述 图案(Pattern)填充是一个非常常见的效果。其中又以斜线填充最为简单。本篇就探讨在Godot4.3中如何使用Geometry2D和CanvasItem的绘图函数实现斜线填充效果。 基础思路 Geometry2D类提供了多边形和多边形以及多边形与折线的布尔运算。按照自然的思路,多边形的斜线填充应该属于“多边形与折线的布尔运算”范畴。 第一个问题是如何获得斜线,这条斜线应该满足什么样

UniApp实现漂亮的音乐歌词滚动播放效果

在现代的音乐播放应用中,歌词的展示和滚动播放已经成为了一个非常常见的功能。今天,我们将通过UniApp来实现一个漂亮的歌词滚动播放功能。我们将使用UniApp提供的组件和API来完成这个任务。 页面结构 在页面的模板部分,我们需要创建一个音频播放器和歌词展示区域。使用<scroll-view>组件来实现歌词的滚动效果。 <template><view class="audio-co

Nuxt3入门:过渡效果(第5节)

你好同学,我是沐爸,欢迎点赞、收藏、评论和关注。 Nuxt 利用 Vue 的 <Transition> 组件在页面和布局之间应用过渡效果。 一、页面过渡效果 你可以启用页面过渡效果,以便对所有页面应用自动过渡效果。 nuxt.config.js export default defineNuxtConfig({app: {pageTransition: {name: 'fade',mode

通过Ajax请求后台数据,返回JSONArray(JsonObject),页面(Jquery)以table的形式展示

点击“会商人员情况表”,弹出层,显示一个表格,如下图: 利用Ajax和Jquery和JSONArray和JsonObject来实现: 代码如下: 在hspersons.html中: <!DOCTYPE html><html><head><meta charset="UTF-8"><title>会商人员情况表</title><script type="text/javasc

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示

Jasperreports+jaspersoft studio 实现单个或多个jrxml(jasper)文件生成一个pdf文件,并利用Servlet发送该pdf文件到浏览器中展示; 代码如下: Demo07.jrxml <?xml version="1.0" encoding="UTF-8"?><!-- Created with Jaspersoft Studio version 6.6.

Differential Diffusion,赋予每个像素它应有的力量,以及在comfyui中的测试效果

🥽原论文要点 首先是原论文地址:https://differential-diffusion.github.io/paper.pdf 其次是git介绍地址:GitHub - exx8/differential-diffusion 感兴趣的朋友们可以自行阅读。 首先,论文开篇就给了一个例子: 我们的方法根据给定的图片和文本提示,以不同的程度改变图像的不同区域。这种可控性允许我们再现

【Unity小技巧】URP管线遮挡高亮效果

前言 在URP渲染管线环境下实现物体遮挡高亮显示效果,效果如下: Unity URP遮挡高亮 实现步骤 创建层级,为需要显示高亮效果的物体添加层级,比如Player 创建一个材质球,也就是高亮效果显示的材质球找到Universal Renderer Data Assets 4.在Assets上添加两个Render Objects组件 第一个做如下三处设置 指定遮挡层级指