【C#】用 DevExpress 创建带“下拉子表”的参数表格视图

展示如何用 DevExpress 创建带"下拉子表"的参数表格视图。主表为 参数行 ParamRow,子表为 子项 ChildParam


一、创建模型类

csharp 复制代码
public class ParamRow
{
    public string Pn { get; set; }
    public string DisplayName { get; set; }
    public string Value { get; set; }
    public List<ChildParam> Children { get; set; } = new List<ChildParam>();
}

public class ChildParam
{
    public string Name { get; set; }
    public string Value { get; set; }
}

二、WinForms 主窗体代码(Form1.cs

csharp 复制代码
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        InitGrid();
    }

    private void InitGrid()
    {
        // 初始化控件
        var gridControl = new DevExpress.XtraGrid.GridControl
        {
            Dock = DockStyle.Fill
        };
        var gridView = new DevExpress.XtraGrid.Views.Grid.GridView(gridControl);
        gridControl.MainView = gridView;
        gridControl.ViewCollection.Add(gridView);
        this.Controls.Add(gridControl);

        // 假数据
        var data = new BindingList<ParamRow>
        {
            new ParamRow
            {
                Pn = "Pn001", DisplayName = "参数1", Value = "123",
                Children = new List<ChildParam>
                {
                    new ChildParam { Name = "子项1", Value = "A" },
                    new ChildParam { Name = "子项2", Value = "B" }
                }
            },
            new ParamRow
            {
                Pn = "Pn002", DisplayName = "参数2", Value = "456",
                Children = new List<ChildParam>
                {
                    new ChildParam { Name = "子项1", Value = "C" }
                }
            }
        };

        // 主表列
        gridView.Columns.AddVisible("Pn", "参数号");
        gridView.Columns.AddVisible("DisplayName", "名称");
        gridView.Columns.AddVisible("Value", "值");

        gridControl.DataSource = data;

        // 设置 Master-Detail
        gridView.OptionsDetail.ShowDetailTabs = false;
        gridView.OptionsDetail.EnableMasterViewMode = true;

        gridView.MasterRowGetChildList += (s, e) =>
        {
            var row = gridView.GetRow(e.RowHandle) as ParamRow;
            e.ChildList = row?.Children;
        };

        gridView.MasterRowGetRelationName += (s, e) => e.RelationName = "子项";
        gridView.MasterRowGetRelationCount += (s, e) => e.RelationCount = 1;

        gridView.MasterRowGetLevelDefaultView += (s, e) =>
        {
            GridView childView = new GridView(gridControl);
            gridControl.ViewCollection.Add(childView);

            childView.Columns.AddVisible("Name", "子名称");
            childView.Columns.AddVisible("Value", "子值");

            e.DefaultView = childView;
        };
    }
}

三、运行环境

  • 需要 DevExpress.WinForms 组件
  • 使用 Visual Studio 创建 WinForms 项目,将 Form1.cs 替换为上述内容即可运行
相关推荐
程序员老舅1 小时前
C++高并发精髓:无锁队列深度解析
linux·c++·内存管理·c/c++·原子操作·无锁队列
雨中风华1 小时前
Linux, macOS系统实现远程目录访问(等同于windows平台xFsRedir软件的目录重定向)
linux·windows·macos
爱吃生蚝的于勒2 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森2 小时前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
翼龙云_cloud2 小时前
腾讯云代理商: Linux 云服务器搭建 FTP 服务指南
linux·服务器·腾讯云
纤纡.2 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
好好学习天天向上~~3 小时前
6_Linux学习总结_自动化构建
linux·学习·自动化
冉佳驹3 小时前
Linux ——— 静态库和动态库的设计与使用
linux·动态库·静态库·fpic
陌上花开缓缓归以3 小时前
linux mtd-utils使用源码分析(ubuntu测试版)
linux·arm开发·ubuntu
yuuki2332333 小时前
【C++】继承
开发语言·c++·windows