【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 替换为上述内容即可运行
相关推荐
Miracle&3 分钟前
2.TCP深度解析:握手、挥手、状态机、流量与拥塞控制
linux·网络·tcp/ip
专注API从业者17 分钟前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python
Ribou1 小时前
Ubuntu 24.04.2安装k8s 1.33.4 配置cilium
linux·ubuntu·kubernetes
tan180°2 小时前
Boost搜索引擎 网络库与前端(4)
linux·网络·c++·搜索引擎
Mr. Cao code2 小时前
Docker:颠覆传统虚拟化的轻量级革命
linux·运维·ubuntu·docker·容器
抓饼先生3 小时前
Linux control group笔记
linux·笔记·bash
UNbuff_03 小时前
Windows netstat 命令使用说明
windows
挺6的还3 小时前
25.线程概念和控制(二)
linux
您的通讯录好友3 小时前
conda环境导出
linux·windows·conda
代码AC不AC4 小时前
【Linux】vim工具篇
linux·vim·工具详解