没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|使用教程|编辑:龚雪|2023-05-19 10:29:44.600|阅读 150 次
概述:本文将介绍在Winform分页控件中集成保存用户列表显示字段及宽度调整设置,希望能帮助到大家~
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
相关链接:
在Winform的分页控件里面,我们提供了很多丰富的功能,如常规分页,中文转义、导出Excel、导出PDF等,基于DevExpress 的样式的分页控件,我们在其上面做了不少封装,以便更好的使用,其中就包括集成保存用户列表显示字段及宽度调整设置。本篇随笔介绍这个实现的过程,通过在当前程序中序列化方式存储一个记录用户设置的文件,提供介质的存储和加载处理。
PS:给大家推荐一个C#开发可以用到的界面组件——DevExpress WinForms,它能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
DevExpress技术交流群8:523159565 欢迎一起进群讨论
在一些用户列表使用的反馈中,希望能够在调整列表字段和它的顺序,以及能够保存上次调整记录的宽度,因此涉及到字段可见列表、字段顺序,列宽度的内容保存,这些功能应该是对用户透明的,不需要开发人员干预,也不需要用户过多操作就能实现的,也就是在用户调整的时候,自动记录这些信息,并存储起来,下一次打开页面的时候,自动加载上次的设置信息即可,逻辑也算比较简单。
因此我们需要检测用户对列宽度调整的事件,记录列字段宽度的信息,如果用户调整字段显示和顺序,那么控件也需要对它进行记录起来,供下次加载使用。
对于DevExpress 的列宽调整,有一个事件,我们在控件逻辑中实现它,记录它的变化并存储即可。
this.gridView1.ColumnWidthChanged += GridView1_ColumnWidthChanged;
然后我们在事件的实现中,判断用户是否启用自定义设置处理,然后进行存储列宽处理即可。
private void GridView1_ColumnWidthChanged(object sender, DevExpress.XtraGrid.Views.Base.ColumnEventArgs e)
{
//如果不设置,默认不处理
if (!this.EnableColumnsSetting) return;
GridViewHelper.SaveColumnSetting(this.gridView1, this.ParentForm?.Name);
}
为了方便,我们把一些逻辑分离到一个独立的辅助文件上,实现代码如下所示。
/// <summary>
/// 保存列设置
/// </summary>
/// <param name="settings">当前设置信息</param>
/// <param name="gridViewName">视图名称</param>
/// <param name="parentFormName">父类窗体名称,用于区分</param>
public static void SaveColumnSetting(GridColumnSetting settings, string gridViewName, string parentFormName)
{
if (settings != null)
{
var folderPath = $"{Environment.CurrentDirectory}/ColumnSetting";
var filePath = $"{folderPath}/{parentFormName}.{gridViewName}.setting";
// 检查文件夹是否存在
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
using (var stream = new FileStream(filePath, FileMode.Create))
{
var formatter = new BinaryFormatter();
formatter.Serialize(stream, settings);
}
}
}
上面主要就是对设置信息进行序列化到一个文件中进行中转,从而避免数据库的处理,同时又会因为不同用户记录不同的设置信息。对于不同的页面,我们通过表单名称来区分不同的设置,因为分页控件场景需要一个唯一的标识来区分不同的数据场景。
而对于可见字段,以及它的顺序调整,那么我们为了方便,提供一个设置的界面给终端用户使用即可,通过列表右键菜单触发入口,如下界面所示。
在列表框中列出界面的所有列(包括隐藏列),并通过拖动或者按钮调整顺序,通过勾选设置可见性,如下界面所示。
上面的列表控件,是一个标准的CheckedListBox控件,通过处理它的拖动事件,实现可拖动顺序的调整。
// 绑定 ListBoxControl 控件的事件,实现拖拉处理 listBoxControl.DragDrop += ListBoxControl_DragDrop; listBoxControl.DragOver += ListBoxControl_DragOver; listBoxControl.MouseDown += ListBoxControl_MouseDown;
而读取上面的列表中的可见列字段及顺序,我们通过配置文件中进行读取,并反序列化即可。
/// <summary>
/// 获取配置信息
/// </summary>
/// <param name="gridView">当前视图</param>
/// <param name="parentFormName">父类窗体名称,用于区分</param>
/// <returns></returns>
public static GridColumnSetting GetSettings(GridView gridView, string parentFormName)
{
var folderPath = $"{Environment.CurrentDirectory}/ColumnSetting";
var filePath = $"{folderPath}/{parentFormName}.{gridView.Name}.setting";
if (!File.Exists(filePath)) return null;
//反序列化
GridColumnSetting settings = null;
using (FileStream stream = new FileStream(filePath, FileMode.Open))
{
var formatter = new BinaryFormatter();
settings = (GridColumnSetting)formatter.Deserialize(stream);
}
return settings;
}
对于用户调整后的设置保存,记录好相关信息后进行序列化到文件中即可,如下实现逻辑所示。
private void btnOK_Click(object sender, EventArgs e)
{
//记录所有的列宽
var sb = new StringBuilder();
var visibleSb = new StringBuilder();
int index = 0;
foreach (var objItem in this.listBoxControl.Items)
{
var item = objItem as CListItem;
if (item != null)
{
var checkState = this.listBoxControl.GetItemChecked(index);
if (checkState)
{
var column = this.GridView.Columns.ColumnByFieldName(item.Value);
if (column != null)
{
sb.Append($"{item.Value}:{column.Width},");
visibleSb.Append($"{item.Value},");
}
}
}
index++;
}
var columnsWidth = sb.ToString().Trim(',');
var columnsVisbile = visibleSb.ToString().Trim(',');
var settings = new GridColumnSetting(columnsWidth, columnsVisbile);
//如果不设置,默认不处理
GridViewHelper.SaveColumnSetting(settings, this.GridView.Name, this.Owner?.Name);
}
最终,我们在开发具体页面数据展示的时候,把分页控件拖动到界面上就可以了,默认具有这些效果,不需要另外增加实现代码,从而通过封装的方式,简化了很多基础的功能处理,并能够给用户一致的体验和界面效果。
本文转载自:
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@ke049m.cn
文章转载自:慧都网



本文将为大家介绍一些MyEclipse开发过程中能用到的EJB开发工具,欢迎下载最新版体验!
本文主要介绍如何在MVVM应用程序中使用虚拟源,欢迎下载最新版组件体验!
Parasoft C/C++test是一款功能强大的代码测试与分析工具,专为提升代码质量、确保软件安全与可靠性而设计。要在 Ubuntu 桌面环境中使用这一强大的工具,第一步就是完成其安装与许可证配置。
注意: Cogent DataHub 软件 v11 包含一些新功能,您的目标操作系统可能不支持这些功能。
相关产品
优秀的界面控件开发包,帮助企业构建卓越应用!
DevExpress DXperience Subscription高性价比的企业级.NET用户界面套包,助力企业创建卓越应用!
DevExpress WinForms Subscription为Windows Forms平台创建具有影响力的业务解决方案,高性价比WinForms界面控件套包。
最新文章 MORE
半岛外围网上直营相关的文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@ke049m.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
半岛外围网上直营 