展示如何用 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
替換為上述內容即可運行