Create Excel Group in Silverlight

  • Demo
  • App.xaml
  • App.xaml.cs
  • App.xaml.vb
  • MainPage.xaml
  • MainPage.xaml.cs
  • MainPage.xaml.vb

The sample demonstrates how to create Excel group in Silverlight via Spire.XLS.

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             x:Class="group.App">
             
    <Application.Resources>
        
    </Application.Resources>
</Application>

using System;
using System.Windows;

namespace group
{
    public partial class App : Application
    {

        public App()
        {
            this.Startup += this.Application_Startup;
            this.Exit += this.Application_Exit;
            this.UnhandledException += this.Application_UnhandledException;

            InitializeComponent();
        }

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            this.RootVisual = new MainPage();
        }

        private void Application_Exit(object sender, EventArgs e)
        {

        }

        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
        {
            // If the app is running outside of the debugger then report the exception using
            // the browser's exception mechanism. On IE this will display it a yellow alert 
            // icon in the status bar and Firefox will display a script error.
            if (!System.Diagnostics.Debugger.IsAttached)
            {

                // NOTE: This will allow the application to continue running after an exception has been thrown
                // but not handled. 
                // For production applications this error handling should be replaced with something that will 
                // report the error to the website and stop the application.
                e.Handled = true;
                Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); });
            }
        }

        private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e)
        {
            try
            {
                string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;
                errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");

                System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");");
            }
            catch (Exception)
            {
            }
        }
    }
}

Imports System.Net
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Documents
Imports System.Windows.Input
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes

Namespace group
	Partial Public Class App
		Inherits Application

		Public Sub New()
			AddHandler Me.Startup, AddressOf Application_Startup
			AddHandler Me.Exit, AddressOf Application_Exit
			AddHandler Me.UnhandledException, AddressOf Application_UnhandledException

			InitializeComponent()
		End Sub

		Private Sub Application_Startup(ByVal sender As Object, ByVal e As StartupEventArgs)
			Me.RootVisual = New MainPage()
		End Sub

		Private Sub Application_Exit(ByVal sender As Object, ByVal e As EventArgs)

		End Sub

		Private Sub Application_UnhandledException(ByVal sender As Object, ByVal e As ApplicationUnhandledExceptionEventArgs)
			' If the app is running outside of the debugger then report the exception using
			' the browser's exception mechanism. On IE this will display it a yellow alert 
			' icon in the status bar and Firefox will display a script error.
			If Not Debugger.IsAttached Then

				' NOTE: This will allow the application to continue running after an exception has been thrown
				' but not handled. 
				' For production applications this error handling should be replaced with something that will 
				' report the error to the website and stop the application.
				e.Handled = True
				Deployment.Current.Dispatcher.BeginInvoke(Sub() ReportErrorToDOM(e))
			End If
		End Sub

		Private Sub ReportErrorToDOM(ByVal e As ApplicationUnhandledExceptionEventArgs)
			Try
				Dim errorMsg As String = e.ExceptionObject.Message + e.ExceptionObject.StackTrace
				errorMsg = errorMsg.Replace(""""c, "'"c).Replace(vbCrLf, vbLf)

				System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(""Unhandled Error in Silverlight Application " & errorMsg & """);")
			Catch e1 As Exception
			End Try
		End Sub
	End Class
End Namespace

<UserControl x:Class="group.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="298" d:DesignWidth="491" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

    <Grid x:Name="LayoutRoot" Background="#FFB5FFFF" Loaded="LayoutRoot_Loaded" Height="272" Width="491">
        <Button Content="Run" Height="23" HorizontalAlignment="Left" Margin="387,206,0,0" Name="buttonRun" VerticalAlignment="Top" Width="75" Click="buttonRun_Click" />
        <sdk:Label Height="53" HorizontalAlignment="Center" Margin="12,86,29,133" Name="label1" VerticalAlignment="Center" Width="450" Content="This sample demonstrate how to create a group in xls" FontSize="14" FontWeight="Bold" HorizontalContentAlignment="Center" IsEnabled="False" />
    </Grid>
</UserControl>

using System;
using System.Windows;
using System.Windows.Controls;
using System.Reflection;
using System.IO;

using Spire.Xls;

namespace group
{
    public partial class MainPage : UserControl
    {
        Workbook workbook = null;
        SaveFileDialog saveFileDialog = new SaveFileDialog();
        public MainPage()
        {
            InitializeComponent();
            this.workbook = new Workbook();
            this.saveFileDialog.Filter = "Excel Document(*.xls)|*.xls";
        }

        private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
           //load the workbook through stream 
            Assembly assembly = this.GetType().Assembly;
            foreach (String name in assembly.GetManifestResourceNames())
            {
                if(name.EndsWith(".xls"))
                {
                   using(Stream fileStr=assembly.GetManifestResourceStream(name))
                   {
                       this.workbook.LoadFromStream(fileStr);
                   }

                }
            }
        }

        private void buttonRun_Click(object sender, RoutedEventArgs e)
        {
            //group the third,fourth and fifth rows
            Worksheet sheet = this.workbook.Worksheets[0];
            sheet.GroupByRows(3, 5, true);

            //group the tenth,eleventh,twelveth and thirteenth rows
            sheet.GroupByRows(10, 13, true);
            
            //save the workbook via stream
            bool? result = this.saveFileDialog.ShowDialog();
            if (result.HasValue && result.Value)
            {
                using (Stream stream = this.saveFileDialog.OpenFile())
                {
                    this.workbook.SaveToStream(stream);
                }
            }
        }
    }
}

Imports System.Windows
Imports System.Windows.Controls
Imports System.Reflection
Imports System.IO

Imports Spire.Xls

Namespace group
	Partial Public Class MainPage
		Inherits UserControl
		Private workbook As Workbook = Nothing
		Private saveFileDialog As New SaveFileDialog()
		Public Sub New()
			InitializeComponent()
			Me.workbook = New Workbook()
			Me.saveFileDialog.Filter = "Excel Document(*.xls)|*.xls"
		End Sub

		Private Sub LayoutRoot_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
		   'load the workbook through stream 
			Dim [assembly] As System.Reflection.Assembly = Me.GetType().Assembly
			For Each name As String In [assembly].GetManifestResourceNames()
				If name.EndsWith(".xls") Then
				   Using fileStr As Stream=[assembly].GetManifestResourceStream(name)
					   Me.workbook.LoadFromStream(fileStr)
				   End Using

				End If
			Next name
		End Sub

		Private Sub buttonRun_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
			'group the third,fourth and fifth rows
			Dim sheet As Worksheet = Me.workbook.Worksheets(0)
			sheet.GroupByRows(3, 5, True)

			'group the tenth,eleventh,twelveth and thirteenth rows
			sheet.GroupByRows(10, 13, True)

			'save the workbook via stream
			Dim result? As Boolean = Me.saveFileDialog.ShowDialog()
			If result.HasValue AndAlso result.Value Then
				Using stream As Stream = Me.saveFileDialog.OpenFile()
					Me.workbook.SaveToStream(stream)
				End Using
			End If
		End Sub
	End Class
End Namespace