在 telerik radgridview ui winform 中导出到 excel 时隐藏每个父行子行的指定列

hide specified columns for each parent row child rows when exporting to excel in telerik radgridview ui winform

我的 winform 应用程序中有一个分层 telerik gridview。 在这个 gridview 主模板中,我有一些行,每个行都有子行,并且在该父行的所有子行的某些列中为空。

我编写了一段代码,只允许展开一个父行,并且在展开该父行时仅显示至少在一个子行中具有值的列,并隐藏其子行对于该父行全部为空的列包含 radGridView1_ChildViewExpanded 事件处理程序的行。

我的问题是当我想将这个分层 telerik gridview 导出到 excel 文件时。在导出时我应该怎么做才能达到我所描述的效果,意味着只导出在其子行中至少有一个值的列,而不为每个父行导出其他列。

为此,您可以使用 GridViewSpreadExportHiddenRowOption 属性 并将其设置为 不导出。然后,要定义隐藏哪些行,将它们的 IsVisible 属性 设置为 false

radGridView1.Rows[0].IsVisible = false;

有关此问题的更多信息,您可以在 Telerik UI 的 WinForms 文档的以下文章中找到:Export to Excel

我使用了这段代码并且有效

void spreadExporter_CellFormatting(object sender, Telerik.WinControls.Export.CellFormattingEventArgs e)
    {
        if (e.GridRowInfoType == typeof(GridViewHierarchyRowInfo))
        {
            int i = 0;
            foreach (GridViewColumn column in radGridView1.MasterTemplate.Templates[0].Columns)
            {
                if (i > 1)
                {
                    int TotalNullRecords = (from row in e.GridCellInfo.RowInfo.ChildRows
                                            where string.IsNullOrWhiteSpace(row.Cells[column.Name].Value.ToString())
                                            select row).ToList().Count;

                    if (TotalNullRecords == e.GridCellInfo.RowInfo.ChildRows.Count)
                    {
                        radGridView1.MasterTemplate.Templates[0].Columns[column.Name].IsVisible = false;
                    }
                    else
                        radGridView1.MasterTemplate.Templates[0].Columns[column.Name].IsVisible = true;
                }
                i++;
            }
        }
    }