我不确定您是否有兴趣使用第三方控件,但我对您的要求完全相同,需要分层显示数据,将重复值显示为具有可折叠节点(如树)的单个值。但是,树控件没有数据绑定,仍然需要一些编码。但是这种基于非规范化数据的 Tree 构建风格可以通过 DataBinding 轻松完成。我使用的 FlexGrid 是 DataBound 到 DataTable,只需要几行代码即可准确显示您需要的内容,尽管它基于第三方控件。
我使用了 ComponentOne FlexGrid 控件并使用它的“SubTotal”功能来生成分层数据。我粘贴下面的代码,以防您有兴趣使用 ComponentOne FlexGrid。您可以下载演示副本并检查。
// Showing master policy in GROUPS
// -----------------------------------------------------------------------------------
// set tree mode to show settings in GROUPS
flxAvailableSettings.Tree.Style = TreeStyleFlags.Simple;
// show outline tree on column 1.
flxAvailableSettings.Tree.Column = 0;
flxAvailableSettings.Cols[0].Visible = true;
flxAvailableSettings.Cols[0].Width = 15;
flxAvailableSettings.AllowMerging = AllowMergingEnum.Nodes;
// subtotal on column 1, outline level 0
flxAvailableSettings.Subtotal(AggregateEnum.None, 0, 0, 0, "{0}");
// use owner draw to suppress repeating group names in Non-Node rows
flxAvailableSettings.DrawMode = DrawModeEnum.OwnerDraw;
flxAvailableSettings.OwnerDrawCell += new C1.Win.C1FlexGrid.OwnerDrawCellEventHandler(flxAvailableSettings_OwnerDrawCell);
// done, autosize columns to finish
flxAvailableSettings.AutoSizeCols();
// -----------------------------------------------------------------------------------
private void flxAvailableSettings_OwnerDrawCell(object sender, C1.Win.C1FlexGrid.OwnerDrawCellEventArgs e)
{
if (!flxAvailableSettings.Rows[e.Row].IsNode && flxAvailableSettings.Cols[e.Col].Name == "PolicyGroup")
e.Text = "";
}
flxAvailableSettings.Subtotal(AggregateEnum.None, 0, 0, 0, "{0}") 行生成树组,虽然我需要在单个列上进行分组,但您可以在多个列上使用组。只需参考他们关于 Subtotalling 的文档示例。
希望这可以帮助。