找回密码
 立即注册

QQ登录

只需一步,快速开始

jim_hujun

初级会员

14

主题

47

帖子

464

积分

初级会员

积分
464

活字格认证

jim_hujun
初级会员   /  发表于:2013-8-22 14:13  /   查看:13256  /  回复:16
是用datagrid做导出表格功能,但是 表格为多维表头的时候,表头无法导出
例如
前台

  1. <c1datagrid:C1DataGrid.Columns>
  2. <c1datagrid:DataGridTextColumn Header="[定点名称]" Binding="{Binding NAME}"  />
  3. <c1datagrid:DataGridNumericColumn Header="[统筹基金(含基本大额)支出预算,全年总预算]"  Binding="{Binding aa}"   />
  4. <c1datagrid:DataGridNumericColumn Header="[统筹基金(含基本大额)支出预算,当期基本统筹实际支出]"  Binding="{Binding bb}" />
  5. <c1datagrid:C1DataGrid.Columns/>
  6. <c1datagrid:C1DataGrid.TopRows>
  7. <c1datagrid:DataGridColumnHeaderRow />
  8. <c1datagrid:DataGridColumnHeaderRow />
  9. </c1datagrid:C1DataGrid.TopRows>
复制代码

后台

  1. public void ExpExcel(C1DataGrid grid,string fileName)
  2.         {
  3.            
  4.             var options = new ExcelSaveOptions()
  5.             {
  6.                 FileFormat = ExcelFileFormat.Xlsx,
  7.                 KeepColumnWidths = true,
  8.                 KeepRowHeights = true
  9.                
  10.             };

  11.             var excelExt = options.FileFormat.ToString();

  12.             var dialog = new System.Windows.Controls.SaveFileDialog()
  13.             {
  14.                 DefaultExt = "*." + excelExt,
  15.                 DefaultFileName = fileName+"_"+DateTime.Now.ToString("yyyyMMdd"),
  16.                 Filter = "Excel " + excelExt + " (*." + excelExt + ")|*." + excelExt + "|All files (*.*)|*.*",
  17.                
  18.             };

  19.             if (dialog.ShowDialog() == false) return;

  20.             using (var stream = dialog.OpenFile())
  21.             {
  22.                 grid.Save(stream, options);
  23.             }
  24.         }
复制代码

但是导出没有表头 需要如何解决?
还有个问题 这几个属性是做什么用的,是否能有详细的说明文档提供呢?
CollapsibleGroups
CollapsedGroupLevel
CollapseGroupsBelowDetail

16 个回复

倒序浏览
gw0506
超级版主   /  发表于:2013-8-22 16:25:00
沙发
你用的是WPF的还是Silverlight的?
回复 使用道具 举报
jim_hujun
初级会员   /  发表于:2013-8-22 16:31:00
板凳
回复 2楼gw0506的帖子

Silverlight的
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-8-22 17:59:00
地板
回复 1楼jim_hujun的帖子

1.请参考随机安装 Demo C1DataGrid_Demo2010.5/Merging/HeadersMerging_SL5.xaml 导出多表头。

2.CollapsibleGroups、CollapsedGroupLevel、CollapseGroupsBelowDetail 这几个属性用于设置分组的折叠信息,可以参考在线帮助文档:
http://helpcentral.componentone.com/nethelp/c1datagridsl/
回复 使用道具 举报
jim_hujun
初级会员   /  发表于:2013-8-23 09:55:00
5#
回复 4楼iceman的帖子

不知道你是如何实现的 我在headersMerging里修改 加入导出功能,一样无法导出表头
导出结果如下图



我修改了
Demo C1DataGrid_Demo2010.5/Merging/HeadersMerging_SL5.xaml  和 CS 麻烦你看看


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <UserControl x:Class="C1DataGrid_Demo2010.HeadersMerging"
  3.              mc:Ignorable="d"
  4.              d:DesignHeight="300"
  5.              d:DesignWidth="400"
  6.              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  7.              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  8.              xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  9.              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  10.              xmlns:c1datagrid="clr-namespace:C1.Silverlight.DataGrid;assembly=C1.Silverlight.DataGrid.5"
  11.              xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml"
  12.              xmlns:local="clr-namespace:C1DataGrid_Demo2010">
  13.             
  14.     <!--
  15.    // **********************************************************************************
  16.    // Header merging is made by:
  17.    // - disabling standard headers (HeadersVisibility=None)
  18.    // - adding custom rows/columns for the headers that look and behave like headers
  19.    // - standard content cell merging
  20.    // **********************************************************************************
  21.     -->
  22.     <Grid x:Name="LayoutRoot">
  23.         <Grid.RowDefinitions>
  24.             <RowDefinition Height="Auto" />
  25.             <RowDefinition Height="*" />
  26.         </Grid.RowDefinitions>

  27.         <c1:C1Toolbar c1:C1NagScreen.Nag="True">
  28.             <c1:C1ToolbarGroup Header="File Export">
  29.                 <c1:C1ToolbarStrip>
  30.                     <c1:C1ToolbarButton x:Name="btnExcel" Click="btnExcel_Click">
  31.                         <StackPanel Orientation="Horizontal" Margin="4">
  32.                             <Image Source="/C1DataGrid_Demo2010.5;component/Resources/docexcel.png" />
  33.                             <TextBlock Text="Excel" VerticalAlignment="Center" Margin="3 0 0 0" />
  34.                         </StackPanel>
  35.                     </c1:C1ToolbarButton>
  36.                     <c1:C1ToolbarButton x:Name="btnPdf" c1:C1NagScreen.Nag="True" >
  37.                         <StackPanel Orientation="Horizontal" Margin="4">
  38.                             <Image Source="/C1DataGrid_Demo2010.5;component/Resources/pdf.png" />
  39.                             <TextBlock Text="Pdf" VerticalAlignment="Center" Margin="3 0 0 0" />
  40.                         </StackPanel>
  41.                     </c1:C1ToolbarButton>
  42.                     <c1:C1ToolbarButton x:Name="btnHtml" c1:C1NagScreen.Nag="True" >
  43.                         <StackPanel Orientation="Horizontal" Margin="4">
  44.                             <Image Source="/C1DataGrid_Demo2010.5;component/Resources/html.png" />
  45.                             <TextBlock Text="Html" VerticalAlignment="Center" Margin="3 0 0 0" />
  46.                         </StackPanel>
  47.                     </c1:C1ToolbarButton>
  48.                 </c1:C1ToolbarStrip>
  49.             </c1:C1ToolbarGroup>
  50.             <c1:C1ToolbarGroup Header="Printing">
  51.                 <c1:C1ToolbarStrip>
  52.                     <c1:C1ToolbarDropDown x:Name="btnHtmlFile">
  53.                         <c1:C1ToolbarDropDown.Header>
  54.                             <StackPanel Orientation="Horizontal" Margin="4">
  55.                                 <Image Source="/C1DataGrid_Demo2010.5;component/Resources/print.png" />
  56.                                 <TextBlock Text="Print" VerticalAlignment="Center" Margin="3 0 0 0" />
  57.                             </StackPanel>
  58.                         </c1:C1ToolbarDropDown.Header>
  59.                         <c1:C1ToolbarDropDown.Menu>
  60.                             <c1:C1ContextMenu>
  61.                                 <c1:C1MenuItem Header="Actual Size..." Tag="ActualSize" c1:C1NagScreen.Nag="True" >
  62.                                 </c1:C1MenuItem>
  63.                                 <c1:C1MenuItem Header="Fit to Page Width..." Tag="PageWidth" c1:C1NagScreen.Nag="True">
  64.                                 </c1:C1MenuItem>
  65.                                 <c1:C1MenuItem Header="Fit to Single Page..." Tag="SinglePage" c1:C1NagScreen.Nag="True">
  66.                                 </c1:C1MenuItem>
  67.                             </c1:C1ContextMenu>
  68.                         </c1:C1ToolbarDropDown.Menu>
  69.                     </c1:C1ToolbarDropDown>
  70.                 </c1:C1ToolbarStrip>
  71.             </c1:C1ToolbarGroup>
  72.             <c1:C1ToolbarGroup Header="Clipboard">
  73.                 <c1:C1ToolbarStrip Overflow="None">
  74.                     <StackPanel>
  75.                         <TextBlock Text="Select the cells, Ctrl+C to copy to the Clipboard," FontSize="10" />
  76.                         <TextBlock Text="Ctrl+V to paste into Excel." FontSize="10" />
  77.                     </StackPanel>
  78.                 </c1:C1ToolbarStrip>
  79.             </c1:C1ToolbarGroup>
  80.         </c1:C1Toolbar>
  81.         
  82.         <c1datagrid:C1DataGrid x:Name="grid" Grid.Row="1" HeadersVisibility="None" AutoGenerateColumns="False" SelectionMode="MultiRange" CanUserAddRows="False" AlternatingRowBackground="White" RowBackground="White" GridLinesVisibility="All" CanUserFreezeColumns="Left" FrozenTopRowsCount="2" FrozenColumnCount="2">
  83.         <c1datagrid:C1DataGrid.Columns>
  84.             <!-- First two columns must be headers, put several headers using this custom syntax-->
  85.             <c1datagrid:DataGridRowHeaderColumn Header="[Country, Continent]" Binding="{Binding Continent}" />
  86.             <c1datagrid:DataGridRowHeaderColumn Header="[Country, Name]" Binding="{Binding Country}" />

  87.             <c1datagrid:DataGridTextColumn Header="[Final, Champion]" Binding="{Binding First}" />
  88.             <c1datagrid:DataGridTextColumn Header="[Final, Runner-up]" Binding="{Binding Second}" />
  89.             <c1datagrid:DataGridTextColumn Header="[Semi-Finals, Third]" Binding="{Binding Third}" />
  90.             <c1datagrid:DataGridTextColumn Header="[Semi-Finals, Fourth]" Binding="{Binding Fourth}" />
  91.         </c1datagrid:C1DataGrid.Columns>
  92.         <c1datagrid:C1DataGrid.TopRows>
  93.             <!-- Add two rows of headers -->
  94.             <c1datagrid:DataGridColumnHeaderRow />
  95.             <c1datagrid:DataGridColumnHeaderRow />
  96.         </c1datagrid:C1DataGrid.TopRows>
  97.     </c1datagrid:C1DataGrid>
  98.     </Grid>
  99. </UserControl>
复制代码


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------华丽的分割线--------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CS文件


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Documents;
  8. using System.Windows.Input;
  9. using System.Windows.Media;
  10. using System.Windows.Media.Animation;
  11. using System.Windows.Shapes;
  12. using C1.Silverlight.DataGrid;
  13. using C1.Silverlight.Data;
  14. using System.Windows.Data;
  15. using C1.Silverlight.DataGrid.Excel;

  16. namespace C1DataGrid_Demo2010
  17. {
  18.     public partial class HeadersMerging : UserControl
  19.     {
  20.         DataGridColumn[] _headerRowColumns;
  21.         DataGridRow[] _headerColumnRows;

  22.         public HeadersMerging()
  23.         {
  24.             InitializeComponent();

  25.             // save headers rows and columns for later
  26.             _headerRowColumns = grid.Columns.Take(2).ToArray();
  27.             _headerColumnRows = grid.TopRows.Take(2).ToArray();

  28.             // forbid unfreezing headers
  29.             grid.FrozenColumnCountChanged += delegate
  30.             {
  31.                 if (grid.FrozenColumnCount < _headerRowColumns.Length)
  32.                     grid.FrozenColumnCount = _headerRowColumns.Length;
  33.             };

  34.             // handle merging when view port changes
  35.             grid.MergingCells += new EventHandler<DataGridMergingCellsEventArgs>(grid_MergingCells);

  36.             #region ** Initialize data

  37.             List<WordCupEntry> entries = new List<WordCupEntry>();
  38.             entries.Add(new WordCupEntry() { Continent = "South America", Country = "Brazil", First = "5 (1958, 1962, 1970, 1994, 2002)", Second = "2 (1950*, 1998)", Third = "2 (1938, 1978)", Fourth = "1 (1974)" });
  39.             entries.Add(new WordCupEntry() { Continent = "Europe", Country = "Italy", First = "4 (1934*, 1938, 1982, 2006)", Second = "2 (1970, 1994)", Third = "1 (1990*)", Fourth = "1 (1978)" });
  40.             entries.Add(new WordCupEntry() { Continent = "Europe", Country = "Germany", First = "3 (1954, 1974*, 1990)", Second = "4 (1966, 1982, 1986, 2002)", Third = "4 (1934, 1970, 2006*, 2010)", Fourth = "1 (1958)" });
  41.             entries.Add(new WordCupEntry() { Continent = "South America", Country = "Argentina", First = "2 (1978*, 1986)", Second = "2 (1930, 1990)", Third = "-", Fourth = "-" });
  42.             entries.Add(new WordCupEntry() { Continent = "South America", Country = "Uruguay", First = "2 (1930*, 1950)", Second = "-", Third = "-", Fourth = "3 (1954, 1970, 2010)" });
  43.             entries.Add(new WordCupEntry() { Continent = "Europe", Country = "France", First = "1 (1998*)", Second = "1 (2006)", Third = "2 (1958, 1986)", Fourth = "1 (1982)" });
  44.             entries.Add(new WordCupEntry() { Continent = "Europe", Country = "England", First = "1 (1966*)", Second = "-", Third = "-", Fourth = "1 (1990)" });
  45.             entries.Add(new WordCupEntry() { Continent = "Europe", Country = "Spain", First = "1 (2010)", Second = "-", Third = "-", Fourth = "1 (1950)" });
  46.             entries.Add(new WordCupEntry() { Continent = "Europe", Country = "Netherlands", First = "-", Second = "3 (1974, 1978, 2010)", Third = "-", Fourth = "1 (1998)" });
  47.             entries.Add(new WordCupEntry() { Continent = "Europe", Country = "Czechoslovakia", First = "-", Second = "2 (1934, 1962)", Third = "-", Fourth = "-" });
  48.             entries.Add(new WordCupEntry() { Continent = "Europe", Country = "Hungary", First = "-", Second = "2 (1938, 1954)", Third = "-", Fourth = "-" });
  49.             entries.Add(new WordCupEntry() { Continent = "Europe", Country = "Sweden", First = "-", Second = "1 (1958*)", Third = "2 (1950, 1994)", Fourth = "1 (1938)" });

  50.             #endregion

  51.             grid.ItemsSource = entries;
  52.         }

  53.         private void btnExcel_Click(object sender, RoutedEventArgs e)
  54.         {
  55.             var options = new ExcelSaveOptions()
  56.             {
  57.                 FileFormat = ExcelFileFormat.Xlsx, // change this to offer a different Excel format
  58.                 KeepColumnWidths = true,
  59.                 KeepRowHeights = true
  60.             };

  61.             var excelExt = options.FileFormat.ToString();

  62.             var dialog = new System.Windows.Controls.SaveFileDialog()
  63.             {
  64.                 DefaultExt = "*." + excelExt,
  65.                 Filter = "Excel " + excelExt + " (*." + excelExt + ")|*." + excelExt + "|All files (*.*)|*.*",
  66.             };

  67.             if (dialog.ShowDialog() == false) return;

  68.             using (var stream = dialog.OpenFile())
  69.             {
  70.                 grid.Save(stream, options);
  71.             }
  72.         }


  73.         void grid_MergingCells(object sender, DataGridMergingCellsEventArgs e)
  74.         {
  75.             // view port columns &amp; rows without headers
  76.             var nonHeadersViewportCols = grid.Viewport.Columns.Where(c => !_headerRowColumns.Contains(c)).ToArray();
  77.             var nonHeadersViewportRows = grid.Viewport.Rows.Where(r => !_headerColumnRows.Contains(r)).ToArray();

  78.             // merge column &amp; rows headers
  79.             foreach (var range in MergingHelper.Merge(Orientation.Vertical, _headerColumnRows, nonHeadersViewportCols, true))
  80.             {
  81.                 e.Merge(range);
  82.             }
  83.             foreach (var range in MergingHelper.Merge(Orientation.Horizontal, nonHeadersViewportRows, _headerRowColumns, true))
  84.             {
  85.                 e.Merge(range);
  86.             }

  87.             // merge header intersection as we want, in this case, horizontally
  88.             foreach (var range in MergingHelper.Merge(Orientation.Horizontal, _headerColumnRows, _headerRowColumns, true))
  89.             {
  90.                 e.Merge(range);
  91.             }

  92.             // merge content
  93.             foreach (var range in MergingHelper.Merge(Orientation.Vertical, nonHeadersViewportRows, nonHeadersViewportCols, false))
  94.             {
  95.                 e.Merge(range);
  96.             }
  97.         }
  98.     }

  99.     public class WordCupEntry
  100.     {
  101.         public string Continent { get; set; }
  102.         public string Country { get; set; }
  103.         public string First { get; set; }
  104.         public string Second { get; set; }
  105.         public string Third { get; set; }
  106.         public string Fourth { get; set; }
  107.     }
  108. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-8-23 14:19:00
6#
回复 5楼jim_hujun的帖子

jim_hujun 你好,

我使用 2013V1 版重现了这个问题。我会把该问题反馈给产品组。

由于时差和问题处理先后顺序原因,要下周回复。
收到反馈后我会及时更新帖子状态。

谢谢
回复 使用道具 举报
jim_hujun
初级会员   /  发表于:2013-8-23 14:26:00
7#
回复 6楼iceman的帖子

好的 非常感谢 有反馈请及时给我邮件 :)
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-8-23 14:46:00
8#
收到回复后,我会更新论坛帖子。请及时关注。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-8-23 17:20:00
9#
回复 7楼jim_hujun的帖子

你好,

C1FlexGrid 可以导出多表头到Excel 。附加是 Demo 请参考。包括多表头和导出多表头。




谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
jim_hujun
初级会员   /  发表于:2013-8-30 10:32:00
10#
回复 9楼iceman的帖子

你好 本地做了测试 可以倒出表头,但是格式不对,需要合并的单元格没有合并
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部