DevExpress常用组件操作扩展类:DevExpressExtensions.cs|C/S开发框架

C# 全选
/// <summary>
/// DevExpress组件扩展方法
/// </summary>
public static class DevExpressExtensions
{
/// <summary>
/// 获取LookupEdit选择的行对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="lue"></param>
/// <returns></returns>
public static T GetSelectedRow<T>(this LookUpEdit lue) where T : class
{
return (T)lue.Properties.GetDataSourceRowByKeyValue(lue.EditValue);
}
/// <summary>
/// 禁用/启用用户自定义按钮
/// </summary>
/// <param name="gc"></param>
/// <param name="buttonTag"></param>
/// <param name="enable"></param>
public static void SetCustomButtonEnable(this GridControl gc, string buttonTag, bool enable)
{
var count = gc.EmbeddedNavigator.Buttons.CustomButtons.Count;
for (var i = 0; i <= count - 1; i++)
{
if (gc.EmbeddedNavigator.Buttons.CustomButtons[i].Tag.ToStringEx().ToLower() == buttonTag.ToLower())
{
gc.EmbeddedNavigator.Buttons.CustomButtons[i].Enabled = enable;
break;
}
}
}
/// <summary>
/// 禁用/启用用户自定义按钮
/// </summary>
/// <param name="gv"></param>
/// <param name="buttonTag"></param>
/// <param name="enable"></param>
public static void SetCustomButtonEnable(this GridView gv, string buttonTag, bool enable)
{
SetCustomButtonEnable(gv.GridControl, buttonTag, enable);
}
/// <summary>
/// 删除表格列
/// </summary>
/// <param name="view"></param>
/// <param name="fieldName"></param>
public static void RemoveColumn(this GridView view, string fieldName)
{
var col = view.Columns[fieldName];
if (col != null) view.Columns.Remove(col);
}
/// <summary>
/// 获取当前行对象实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="view"></param>
/// <returns></returns>
public static T GetObject<T>(this GridView view) where T : class
{
return (T)view.GetRow(view.FocusedRowHandle);
}
/// <summary>
/// 获取指定行的对象实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="view"></param>
/// <param name="rowHandle"></param>
/// <returns></returns>
public static T GetRow<T>(this GridView view, int rowHandle) where T : class
{
return (T)view.GetRow(rowHandle);
}
/// <summary>
/// 获取当前行对象实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="view"></param>
/// <returns></returns>
public static T GetRow<T>(this GridView view) where T : class
{
return (T)view.GetRow(view.FocusedRowHandle);
}
/// <summary>
/// 获取指定行对象实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="view"></param>
/// <param name="rowHandle"></param>
/// <returns></returns>
public static T GetObject<T>(this GridView view, int rowHandle) where T : class
{
return (T)view.GetRow(rowHandle);
}
/// <summary>
/// 获取勾选行的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="control">复合勾选组件</param>
/// <param name="valueMemeber">取值的属性名称,如:CustomerCode</param>
/// <param name="split"></param>
/// <returns></returns>
public static string GetEditValue<T>(this CheckedListBoxControl control, string valueMemeber, string split = ",")
{
StringBuilder sb = new StringBuilder();
if (control.DataSource is IList list)
{
foreach (T v in control.CheckedItems)
{
var value = ObjectHelper.GetValueOfObject(v, valueMemeber);
sb.Append(value + split);
}
}
return sb.ToString();
}
/// <summary>
/// 获取勾选的行有效行号(RowHandle>=0),行号去重。
/// </summary>
/// <param name="gv"></param>
/// <returns></returns>
public static int[] GetSelectedRowHandles(this GridView gv)
{
var rows = gv.GetSelectedRows();
return rows.Where(w => w >= 0).Distinct().ToArray();
}
/// <summary>
/// 获取勾选行的指定列的值
/// </summary>
/// <typeparam name="T">实体模型</typeparam>
/// <param name="gv">表格组件</param>
/// <param name="func">取值函数</param>
/// <returns></returns>
public static List<String> GetCheckedKeys<T>(this GridView gv, Func<T, String> func)
where T : class
{
List<String> list = new List<string>();
if (gv.SelectedRowsCount > 0)
{
foreach (int i in gv.GetSelectedRowHandles())
{
list.Add(func((T)gv.GetRow(i)));
}
}
return list;
}
/// <summary>
/// 获取勾选行对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="gv"></param>
/// <returns></returns>
public static List<T> GetCheckedRows<T>(this GridView gv)
where T : class
{
List<T> list = new List<T>();
if (gv.SelectedRowsCount > 0)
{
foreach (int i in gv.GetSelectedRowHandles())
{
list.Add((T)gv.GetRow(i));
}
}
return list;
}
/// <summary>
/// 表格组件添加一条对象实体记录
/// </summary>
/// <param name="view">表格组件</param>
/// <param name="row">对象实体</param>
/// <param name="refreshDataSource">添加记录后立即刷新数据源</param>
/// <returns></returns>
public static int AddRow(this GridView view, object row, bool refreshDataSource = true)
{
//获取数据源
var list = GetDataSourceList(view);
//数据源添加对象实体
list.Add(row);
int index = list.IndexOf(row);
//刷新表格数据源
if (refreshDataSource)
{
view.GridControl.RefreshDataSource();
view.FocusedRowHandle = view.GetRowHandle(index);
}
return index;
}
/// <summary>
/// 表格组件添加多条对象实体记录
/// </summary>
/// <param name="view"></param>
/// <param name="rows"></param>
/// <param name="refreshDataSource"></param>
/// <returns></returns>
public static int AddRows(this GridView view, IList rows, bool refreshDataSource = true)
{
if (rows.Count == 0) return -1;
//获取数据源
var list = GetDataSourceList(view);
//数据源添加对象实体
for (int i = 0; i <= rows.Count - 1; i++) list.Add(rows[i]);
//获取数据源序号
var index = list.IndexOf(rows[0]);
//刷新表格数据源
if (refreshDataSource)
{
view.GridControl.RefreshDataSource();
view.FocusedRowHandle = view.GetRowHandle(index);
}
return index;
}
/// <summary>
/// 获取表格数据源
/// </summary>
/// <param name="view"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static IList GetDataSourceList(this GridView view)
{
if (view.GridControl.DataSource is IList list)
return list;
else if (view.GridControl.DataSource is IListSource listSource)
return listSource.GetList();
else if (view.GridControl.DataSource == null)
throw new Exception(view.GridControl.Name + "表格组件没有初始化数据源!");
else
throw new Exception(view.GridControl.Name + "表格组件数据源不支持,请扩展GetDataSourceList接口!");
}
/// <summary>
/// 删除所有记录
/// </summary>
/// <param name="view">表格组件</param>
/// <param name="refreshDataSource">刷新数据源</param>
/// <returns></returns>
public static int DeleteAllRows(this GridView view, bool refreshDataSource = true)
{
//获取数据源
var list = GetDataSourceList(view);
//清空数据源
list.Clear();
//刷新表格数据源
if (refreshDataSource)
{
view.GridControl.RefreshDataSource();
}
return list.Count;
}
/// <summary>
/// 表格插入对象记录
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="view">表格组件</param>
/// <param name="row">对象实体</param>
/// <param name="refreshDataSource">刷新数据源</param>
/// <returns></returns>
public static int InsertRow<T>(this GridView view, T row, bool refreshDataSource = true) where T : class
{
//获取数据源
var list = GetDataSourceList(view);
int handle = view.FocusedRowHandle;
int index = 0;
if (handle >= 0)
{
int i = list.IndexOf(view.GetFocusedRow());
list.Insert(i, row); //数据源插入对象实体
index = list.IndexOf(row);
}
else
{
index = list.Add(row);//数据源添加对象实体
}
//刷新表格数据源
if (refreshDataSource)
{
view.GridControl.RefreshDataSource();
view.FocusedRowHandle = view.GetRowHandle(index);
}
return index;
}
/// <summary>
/// 自动设置CheckedListBoxControl组件的勾选的项目。通过 ValueMember 绑定的属性名称取值。
/// 该方法对绑定数据源的列表组件有效。
/// </summary>
/// <param name="ctl">CheckedListBoxControl组件</param>
/// <param name="values">值,如:A,B,C,多个值分隔符分开</param>
/// <param name="split">默认为调号分隔符</param>
public static void SetItemChecked(this CheckedListBoxControl ctl, string values, string split = ",")
{
var arr = (values ?? "").Split(new string[] { split }, StringSplitOptions.RemoveEmptyEntries);
var list = ctl.DataSource as IList;
for (int i = 0; i <= list.Count - 1; i++)
{
var v = ObjectHelper.GetValueOfObject(list[i], ctl.ValueMember).ToString();
ctl.SetItemChecked(i, arr.Contains(v));
}
}
/// <summary>
/// 获取CheckedListBoxControl组件勾选的值,如勾选多个项,返回A,B,C。
/// 通过 ValueMember 绑定的属性名称取值。
/// </summary>
/// <param name="ctl">CheckedListBoxControl组件</param>
/// <param name="split">默认为调号分隔符</param>
/// <returns></returns>
public static string GetEditValue(this CheckedListBoxControl ctl, string split = ",")
{
StringBuilder sb = new StringBuilder();
var list = ctl.DataSource as IList;
for (int i = 0; i <= list.Count - 1; i++)
{
if (ctl.GetItemChecked(i))
{
var v = ObjectHelper.GetValueOfObject(list[i], ctl.ValueMember).ToString();
sb.Append(v + split);
}
}
return sb.ToString();
}
/// <summary>
/// 获取勾选项的值
/// </summary>
/// <param name="ctl"></param>
/// <param name="split"></param>
/// <returns></returns>
public static string GetCheckedValue(this CheckedListBoxControl ctl, string split = ",")
{
return GetEditValue(ctl, split);
}
/// <summary>
/// 获取表格组件的数据源
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="view"></param>
/// <returns></returns>
public static List<T> GetDataSource<T>(this GridView view) where T : class
{
return view.GridControl.DataSource as List<T>;
}
/// <summary>
/// 获取表格组件的数据源
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="gc"></param>
/// <returns></returns>
public static List<T> GetDataSource<T>(this GridControl gc) where T : class
{
return gc.DataSource as List<T>;
}
/// <summary>
/// 若当前记录的实例类型是T类型,返回当前记录,否则,转换为T类型并返回。
/// 适用场景:表格的数据源是List<res_T>, 转换为T。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="view"></param>
/// <returns></returns>
public static T GetObjectAs<T>(this ISummaryView view) where T : class
{
var obj = view.GetRow(view.FocusedRowHandle);
if (obj is T)
return (T)obj;
else
return ObjectHelper.Convert<T>(obj);
}
}
参考文档:
使用DeepSeek生成DevExpress表格、窗体、C#模型代码并集成到开发框架|C/S开发框架
详解DevExpress.LookUpEdit控件实现自动搜索定位功能|C/S开发框架
DevExpress LookupEdit按回车键自动确认选择数据|C/S开发框架
DevExpress GridControl显示主从表数据(Master/Detail)|C/S开发框架
VS2022+.NET 部署DevExpress V23.2|C/S开发框架
DevExpress组件版本下载、安装与VS开发环境 | Winform C/S框架|C/S开发框架
CSFrameworkV6开发框架升级VS2022+.NET8+DevExpress24.1操作步骤|C/S开发框架
C/S结构快速开发框架使用的DevExpress常用组件|C/S开发框架
DevExpress XtraReport 开发指南|单表报表设计详解(C#)|C/S开发框架
C# DevExpress高级篇 | GridLookUpEdit组件使用|C/S开发框架
VS2022解决方案部署DevExpress组件(DevExpress Project Settings)|C/S开发框架
C# DevExpress教学 GridLookUpEdit组件表格下拉组件使用|C/S开发框架
踩坑日记 | DevExpress GridView.GetSelectedRows方法返回无效的RowHandle行号|C/S开发框架
喜鹊ERP | DevExpress 表格常用操作指南|表格组件自动分组|C/S开发框架
踩坑日记 | DevExpress GridControl设置DataSource数据源无效|C/S开发框架
DevExpress 通过小三角图标变更控件类型|C/S开发框架
使用DeepSeek生成DevExpress表格、窗体、C#模型代码并集成到开发框架|C/S开发框架
详解DevExpress.LookUpEdit控件实现自动搜索定位功能|C/S开发框架
DevExpress LookupEdit按回车键自动确认选择数据|C/S开发框架
DevExpress GridControl显示主从表数据(Master/Detail)|C/S开发框架
VS2022+.NET 部署DevExpress V23.2|C/S开发框架
DevExpress组件版本下载、安装与VS开发环境 | Winform C/S框架|C/S开发框架
CSFrameworkV6开发框架升级VS2022+.NET8+DevExpress24.1操作步骤|C/S开发框架
C/S结构快速开发框架使用的DevExpress常用组件|C/S开发框架
DevExpress XtraReport 开发指南|单表报表设计详解(C#)|C/S开发框架
C# DevExpress高级篇 | GridLookUpEdit组件使用|C/S开发框架
VS2022解决方案部署DevExpress组件(DevExpress Project Settings)|C/S开发框架
C# DevExpress教学 GridLookUpEdit组件表格下拉组件使用|C/S开发框架
踩坑日记 | DevExpress GridView.GetSelectedRows方法返回无效的RowHandle行号|C/S开发框架
喜鹊ERP | DevExpress 表格常用操作指南|表格组件自动分组|C/S开发框架
踩坑日记 | DevExpress GridControl设置DataSource数据源无效|C/S开发框架
DevExpress 通过小三角图标变更控件类型|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
