You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C# WinForm中通过过滤旧UltraGrid单元格创建新UltraGrid

基于UltraGrid过滤条件创建新网格的解决方案

核心思路

UltraGrid的展示依赖绑定的数据源(如DataTable、泛型集合),直接操作数据源进行过滤后再绑定新网格,比遍历网格单元格的嵌套循环更高效且不易出错,能避免网格显示逻辑(如虚拟化、分组)带来的偏差。

具体实现(以DataTable数据源为例)

  • 提取原网格的数据源,复制表结构以保留列定义
  • 筛选出C列有值的行,导入到新的数据源中
  • 将过滤后的数据源绑定到新UltraGrid
// 获取原网格XYZ的数据源(假设绑定的是DataTable)
DataTable originalTable = ultraGridXYZ.DataSource as DataTable;
if (originalTable == null) return;

// 复制原表结构,创建空的过滤表
DataTable filteredTable = originalTable.Clone();

// 遍历原表行,筛选C列非空的行
foreach (DataRow row in originalTable.Rows)
{
    // 根据C列实际数据类型调整判断逻辑,这里处理字符串/空值场景
    if (!row.IsNull("C") && !string.IsNullOrEmpty(row["C"].ToString().Trim()))
    {
        filteredTable.ImportRow(row);
    }
}

// 绑定到新UltraGrid
ultraGridNew.DataSource = filteredTable;

泛型集合数据源的处理(LINQ方式)

如果原网格绑定的是自定义实体集合,用LINQ过滤更简洁:

List<YourEntityModel> originalList = ultraGridXYZ.DataSource as List<YourEntityModel>;
if (originalList == null) return;

// 筛选C属性非空的实体
var filteredList = originalList.Where(model => !string.IsNullOrEmpty(model.C?.Trim())).ToList();

// 绑定新网格
ultraGridNew.DataSource = filteredList;

注意事项

  • 需根据C列实际数据类型调整判断逻辑:比如数值类型需判断是否为非默认值(如model.C != 0),日期类型判断是否为有效日期
  • 不要直接遍历UltraGrid的Rows和Cells,网格的显示行可能因分页、分组等和实际数据源不一致,操作数据源是更可靠的方式

内容的提问来源于stack exchange,提问作者sinha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:16:40