【C#】用 DevExpress 创建带“下拉子表”的参数表格视图
展示如何用 DevExpress 创建带“下拉子表”的参数表格视图。主表为 参数行 ParamRow
,子表为 子项 ChildParam
。
一、创建模型类
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
)
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-DetailgridView.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
替换为上述内容即可运行