WinForms.Spreadsheet: Sorting Data

In this blog we will discuss how to sort existing data in MindFusion.Spreadsheet for WinForms both programmatically and by using the built-in form.

Introduction

As with all previous blogs we start off by creating a new Windows Forms Application in Visual Studio and adding a WorkbookView control to the main form. The WorkbookView displays a Workbook with a single worksheet.

Initializing the data

The data that should be sorted is contained in an CSV (comma-separated value) file, which is loaded at the start of the application. Some minor formatting is applied to the imported data, such as emphasizing the header row. The columns are automatically resized to fit the content through the ResizeColumnsToFit method of the WorkbookView class.

Sorting programmatically

The sorting is performed by calling the Sort method of the Worksheet class and providing a SortOptions object. This object contains information about the sort, such as which row or column to sort by, the sort direction (horizontal or vertical) and so on. In this particular case, we sort the data by columns, therefore we specify TopToBottom for the sort direction:

sortOptions.Direction = SortDirection.TopToBottom;

The columns (or rows) to sort by are specified by SortKey objects, added to the Keys collection of the SortOptions class. The order of the keys in the collection is important. For example, to sort by the first column and then by the fourth column, we define the following keys:

sortOptions.Keys.Add(new SortKey(0));
sortOptions.Keys.Add(new SortKey(3));

The Sort method accepts as argument the range to be sorted. In this sample we would like to prevent the header row from being sorted and specify A2:D15 for the target range.

The following image shows the running sample:

spreadsheet-sorting

Sorting through the built-in form

Sorting can also be performed through the built-in SortForm form, contained in the MindFusion.Spreadsheet.WinForms.StandardForms.dll assembly. The image below displays the form with the first and fourth columns selected as sort keys:

spreadsheet-sortform

The source code is available for download from here:

https://mindfusion.eu/_samples/SpreadsheetSorting.zip

The trial version of MindFusion.Spreadsheet for WinForms can be downloaded from here:

Download MindFusion.Spreadsheet for WinForms Trial Version

About MindFusion.Spreadsheet for WinForms: A powerful .NET spreadsheet component with great capabilities for editing, styling and formatting large amounts of data.

WinForms.Spreadsheet: Apply Conditional Formatting

In this blog we will discuss how to apply conditional formatting to a range of cells in MindFusion.Spreadsheet for WinForms. Conditional formatting is a feature that allows you to apply different formatting options, such as background color, borders, or font to cells that meet certain criteria and have this formatting automatically change depending on the value or formula of the cell.

Introduction

We start off by creating a new Windows Forms Application in Visual Studio and adding a WorkbookView control to the main form. The WorkbookView displays a Workbook with a single worksheet.

Initializing the data

The goal of the application is to display an array of temperature values, colored differently based on a standard temperature scale. The data of the application is hard-coded in several arrays, which are used to initialize the worksheet:

var names = new CultureInfo("en-US").DateTimeFormat.AbbreviatedMonthNames;
var avgHigh = new int[] { 4, 7, 12, 17, 21, 25, 28, 28, 23, 18, 10, 4 };
var avgLow = new int[] { -5, -4, 0, 5, 9, 13, 14, 14, 10, 6, 0, -4 };
var recordHigh = new int[] { 16, 17, 24, 28, 29, 32, 37, 34, 34, 30, 24, 17 };
var recordLow = new int[] { -21, -19, -15, -5, -1, 4, 7, 8, -2, -2, -7, -16 };

Applying the conditional formatting

In MindFusion.Spreadsheet conditional formatting is applied to a range of cells through its style. This is done by calling the Style.ConditionalFormats.Add method to create IConditionalFormat objects and then setting the properties of the newly created object to specify the condition criteria and the style to apply when the criteria are met. In this application we use a simple algorithm to distribute temperature values linearly along a blue-yellow-red color scale. When a cell value falls within a specific temperature interval, the conditional formatting applies a background color to this cell to visually indicate the value.

The following image shows the running sample:

spreadsheet-conditionalformats

Conditional formatting can also be created and modified through the built-in ConditionalFormatForm form, contained in the MindFusion.Spreadsheet.WinForms.StandardForms.dll assembly. The image below displays the form for the temperature cell range.

spreadsheet-conditionalformatform

The source code is available for download from here:

https://mindfusion.eu/_samples/SpreadsheetConditionalFormats.zip

The trial version of MindFusion.Spreadsheet for WinForms can be downloaded from here:

Download MindFusion.Spreadsheet for WinForms Trial Version

About MindFusion.Spreadsheet for WinForms: A powerful .NET spreadsheet component with great capabilities for editing, styling and formatting large amounts of data.

Spreadsheet for WinForms, V1.1 Released

MindFusion has released Spreadsheet for WinForms 1.1. Here is an overview of the new features:

Export to XLSX (Office Open XML) format
You can use the new ExcelExporter class to export MindFusion.Spreadsheet Workbook objects to Excel. The export is very easy to do – just create an instance of the ExcelExporter class and call its Export method, passing the Workbook object as a parameter.

Export to ODS (OpenDocument Spreadsheet) format
You can now export MindFusion.Spreadsheet Workbook objects to the OpenDocument format. To export a workbook, simply create an instance of the new CalcExporter class and call its Export method, passing the Workbook object as a parameter.

Moving cell ranges
You can now move cells and cell ranges both programmatically and interactively. To move a cell range programmatically, call one of the MoveTo overloads of a CellRange object representing the range to move and specify the destination. To move a range interactively, select the range, click near the end of the selection rectangle and drag the rectangle to the desired location. If you want to disable interactive movement set the AllowMoveCells property of the WorkbookView class to false.

Rows, columns and cell ranges can be moved either programmatically or interactively with the mouse.

Rows, columns and cell ranges can be moved either programmatically or interactively with the mouse.

Moving rows and columns
You can move columns and rows programmatically as well interactively. To move a column/row programmatically, call one of the Move overloads of the ColumnCollection or RowCollection classes respectively, and specify the column/row to move and the desired location. To move columns or rows interactively, select the columns or rows entirely, click on any of the selected column or row headers and drag.

Find and replace
The workbook now provides a set of methods for searching and replacing text. You can search text with the Find and FindAll methods. The former searches for the first cell containing a given text, the later returns all cells matching the criteria. To replace text, use the Replace and ReplaceAll methods.

Improved in-place editing
You can use the extended in-place formula editing, which supports automatic literal, string, cell and cell range coloring and context-sensitive tooltip information for functions. The information for custom functions can be provided through the new ExtendedInformationProvider property of the Workbook class.

You can download the trial version from the link below:

Download MindFusion.Spreadsheet for WinForms 1.1, Trial Version

If you require technical support, you can post a message at the forum, send us an e-mail at support@mindfusion.eu. or use the help desk. MindFusion takes special effort in providing fast and detailed answers to all inquiries that we receive.

About MindFusion.Spreadsheet for WinForms: An easy-to-use programming component suitable for building all types of spreadsheets fast and easy. The tool supports formulas, tool-tips, cell annotations, cell spanning, scrolling and many more. You can add charts and images as well use the flexible style system to design the perfect spreadsheet. The component supports full undo and redo as well copy and paste from Windows clipboard.
You can import spreadsheet data from CSV, XLSX or ODS files and export the final spreadsheet in a number of formats – as images, PDF or CSV, XLSX or ODS files. Various auxiliary forms help you quickly adjust the data and appearance of your spreadsheet. Read more about the features of the component here or check the license prices at the buy page.

Spreadsheet for WinForms is part of MindFusion Pack for WinForms, which offers other useful components that are of great use when you build any type of WinForms application – from a diagramming library to map control to gauges: check them here.

WinForms Spreadsheet Databinding

In this blog we will discuss how to display the information from a database inside MindFusion.Spreadsheet for WinForms, how to validate and edit the data and how to write back any changes.

Introduction

We start off by creating a new Windows Forms Application in Visual Studio, adding a WorkbookView control to the main form and adding the Northwind database (nwind.mdb) as a data source. For simplicity we only add the Categories table. After compiling the application we can add the DataSource and the CategoriesTableAdapter as components to the main form.

Loading the data

We traverse the rows in the data source and populate the spreadsheet by assigning the data to the Data property of the respective worksheet cells. To prevent certain columns from being edited (for example auto-increment keys and image fields), we mark these columns by setting their Tag property. All columns and rows beyond those that actually display data are hidden by setting their IsHidden property to true. The column titles are set to the names of the corresponding database columns. Finally, the columns are resized to fit their contents through the ResizeColumnsToFit method of the view. The complete code of the data loading can be found in the LoadData method.

Note, that during the data loading, the loading flag is set to true. This is done to prevent some unnecessary operations in the CellChanging and CellChanged event handlers.

Setting up the view

To resemble a data grid, we need to disable certain functions in the view. More specifically, we need to hide the tabs, the formula bar, the auto-fill handle and the hidden header indicator.

workbookView1.ShowHiddenHeaderIndicators = false;
workbookView1.AllowAutoFill = false;
workbookView1.ShowTabs = false;
workbookView1.ShowFormulaBar = false;

Performing validation

We want to prevent the users from changing the values of certain cells – for example, the cells in the auto-increment column and the cells representing pictures. To do this, we will handle the InplaceEditStarting event of the WorkbookView and the WorksheetCellChanging event of the Workbook. In the event handlers we check the Tag value of the related column. If the column is marked as read-only, we set the Cancel property of the event argument to true, to prevent the edit or change.

Adding new rows

When we populated the data from the dataset, we left an empty row at the bottom of the spreadsheet. The intent is that this empty row should be used to add new rows to the table. When the user edits a cell of the empty row, the row key is automatically calculated and a new empty row is added at the bottom of the spreadsheet. To implement this functionality, we handle the WorksheetCellChanged event of the Workbook. In the event handler, we inspect the row of the edited cell. If this is the last visible row in the spreadsheet, we calculate a key for this row and reveal another row at the bottom of the spreadsheet by setting its IsHidden property to false.

Saving changes to the database

Changes are immediately reflected back to the database from within the WorksheetCellChanged event handler. New rows are added via the Rows.Add method of the Categories data table. Existing rows are updated directly through the respective DataRow object. The changes are effectively performed by calling the Update method of the table adapter.

The following image shows the running sample:

spreadsheet-databinding

The source code is available for download from here:

https://mindfusion.eu/_samples/SpreadsheetDatabase.zip

The trial version of MindFusion.Spreadsheet for WinForms can be downloaded from here:

Download MindFusion.Spreadsheet for WinForms Trial Version

About MindFusion.Spreadsheet for WinForms: A powerful .net spreadsheet component with great capabilities for editing, styling and formatting large amounts of data.

MindFusion.Spreadsheet for WinForms Beta Version

MindFusion.Spreadsheet is a spreadsheet component that can be used to create, open, manage, and export spreadsheet documents in many different formats without requiring Microsoft Excel. It is implemented as a .NET control and can be easily integrated into any application targeting the Microsoft .NET platform.

MindFusion.Spreadsheet supports:

  • Importing documents from CSV, XLSX, ODS
  • Export to PDF,CSV,image
  • Numerous chart types
  • Customizable cell appearance
  • Merged cells
  • Conditional formatting
  • Data validation
  • Images
  • Cell annotations
  • Previewing and printing
  • Undo and redo
  • Auxiliary forms
MindFusion.Spreadsheet lets you use an impressive range of calculation formulas.

MindFusion.Spreadsheet lets you use an impressive range of calculation formulas.

MindFusion.Spreadsheet provides intuitive user-interaction model for creating or editing spreadsheet documents. Its programmatic interface is powerful and simple to use. The control has been tested with the most popular .NET development environments and programming languages.

The beta version of the component is available for download from this link:

Download MindFusion.Spreadsheet for WinForms Beta Version

You can learn more about the features of the component here. Take a look at the gallery, which illustrates some of the capabilities of the control. Online documentation is also available at this link.

For technical support, please write at the forum or use email support@mindfusion.eu. You can also use the help desk.

Numerous chart types are available.

Numerous chart types are available.