【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 替换为上述内容即可运行
相关推荐
咖丨喱13 小时前
【MMC Core + hc16 Host(WiFi SDIO 如何落到控制器)】
linux
等我调个Bug14 小时前
【Linux系统篇】权限
linux·服务器
~光~~15 小时前
【嵌入式linux学习】Cache 策略:Write-Through / Write-Back + Allocation
linux·学习·spring
峥无15 小时前
Linux NPTL线程:创建/终止/等待/分离/栈布局内核原理|线程下篇
linux·运维·线程
Patrick在香港15 小时前
同一份脚本,mac 正常 Windows 乱码:open() 默认编码实测(附 3.15 终局)
utf-8·windows·python·macos·跨平台·编码·标准库
当青春邂逅吉米多维奇15 小时前
C#图解教程(第5版) 同步方法
开发语言·c#
波力海苔夹心脆67515 小时前
C# 机器视觉实战:单相机引导机械手精准贴合,从拍照、偏差计算(平移+旋转)到坐标补偿全解
开发语言·经验分享·数码相机·c#·视觉检测·.net
是jin奥16 小时前
Ubuntu 访问 Windows 共享目录
linux·运维·ubuntu
星恒随风16 小时前
Linux基础IO万字详解:从文件描述符fd到重定向、FILE缓冲机制及MiniShell升级
linux·运维·笔记·学习·状态模式
yunwei3716 小时前
eBPF 入门开发实践教程一:Hello World,基本框架和开发流程
linux·后端·性能优化