展示如何用 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-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
替换为上述内容即可运行