【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 替换为上述内容即可运行
相关推荐
似水明俊德18 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
如意.75918 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
Thera77719 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
阿蒙Amon19 小时前
C#常用类库-详解SerialPort
开发语言·c#
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ20 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
似水明俊德21 小时前
02-C#.Net-反射-学习笔记
开发语言·笔记·学习·c#·.net
安当加密21 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
内卷焦虑人士21 小时前
Windows安装WSL2+Ubuntu 22.04
linux·windows·ubuntu
NGBQ121381 天前
4DDiG Partition Manager.exe 全解析:Windows 端专业磁盘分区管理工具深度指南
windows
dddddppppp1231 天前
qemu模拟的一个内核驱动 io口中断
linux