Мини-учебник по ReoGrid версии 0.9.2

reogrid_header

Windows Form и WPF

Reogrid поддерживает технологии Windows Form и WPF. Поэтому в архиве с файлами компонента приведено два варианта компонента: WPF-версия содержит эти три буквы в названии папки.

Начиная с версии 0.8.9, все редакции Reogrid поддерживают клиентский профиль (.NET client profile). Код примеров данного руководства выполнялся в .NET client profile 4.

Бесплатное и платное издания

Начиная с версии 0.8.9, Reogrid имеет как бесплатное (Free), так и платное (Pro) издания. Бесплатное содержит весь функционал версий по 0.88 (основной набор функций). Платное издание содержит новые функции и возможности, а также подписку на техническую поддержку сроком в 3 месяца. Список с указанием отличий доступен на официальном сайте.

Выбор редакции

Компонент Reogrid доступен в нескольких редакциях:

  • Минимальная (Minimum или WPFMinimum) – содержит лишь библиотеку unvell.ReoGrid.dll. Доступны все основные функции.
  • Стандартная (Release) – все основные функции и вычисление формул
  • Расширенная (Extension или WPFExtension). Помимо указанных выше, содержит библиотеки для работы со сценариями: unvell.ReoScript.dll иunvell.ReoScript.EditorLib.dll. Также в состав этой редакции входят два сторонних компонента: Antlr3.Runtime.dll и FastColoredTextBox.dll (Windows Form).
  • Стандартная Про (Release Pro) и Расширенная Про (Extension Pro) кроме тех же функций и возможностей, что содержат одноимённые редакции без пристаки “Про”, содержат кое-что ещё – с полным списком отличий можно ознакомиться на официальном сайте проекта.

Первое подключение Reogrid

  1. Копируем библиотеки компонента в папку Debug и/или Release вашего проекта.
  2. В свойствах проекта, разделе “Ссылки” подключаем библиотеки к проекту.
  3. В свойствах панели элементов управления выбираем пункт “Выбрать компоненты”, указываем на библиотеку Reogrid и выбираем подключаемые компоненты.
  4. Если всё сделано верно, то в панели элементов управления появится Reogrid.

Обновление Reogrid

  1. Переходим к свойствам проекта. В разделе “Ссылки” удаляем все ссылки на библиотеки Reogrid.
  2. Из папки проекта Debug и/или Release вашего проекта удаляем файлы устаревшей сборки Reogrid.
  3. Копируем файлы новой версии в папку Debug / Release вашего проекта.
  4. В свойствах проекта, разделе “Ссылки” добавляем ссылки на библиотеки Reogrid.
  5. Пересобираем проект (в главном меню пункт ПОСТРОЕНИЕ – Перестроить Название проекта. ).

Рассмотрим основные моменты работы с компонентом на конкретных примерах. То есть, на основе рассмотренных ниже фрагментов кода можно собрать работоспособный редактор таблиц. Изначально подразумевается, что на форму добавлен компонент Reogrid с именем rgrid.

Необходимые пространства имён (Namespaces)

Для создания редактора редактора электронных таблиц будет достаточно подключить следующие пространства имён:

  • System.IO – для работы с файловой системой
  • System.Text – для работы с кодировками текста
  • unvell.ReoGrid – сам компонент
  • unvell.ReoGrid.CellTypes – типы данных ячеек (кнопка, флажок)
  • unvell.ReoGrid.Actions – действия
  • unvell.ReoGrid.DataFormat – форматы данных (дата, проценты, текст)
  • unvell.ReoGrid.Print – функции печати
  • unvell.ReoGrid.Chart – диаграммы
'VB
Imports System.IO
Imports System.Text
Imports unvell.ReoGrid
Imports unvell.ReoGrid.CellTypes
Imports unvell.ReoGrid.Actions
Imports unvell.ReoGrid.DataFormat
Imports unvell.ReoGrid.Print
Imports unvell.ReoGrid.Chart
//C#
using System.IO;
using System.Text;
using unvell.ReoGrid;
using unvell.ReoGrid.CellTypes;
using unvell.ReoGrid.Actions;
using unvell.ReoGrid.DataFormat;
using unvell.ReoGrid.Print;
using System;
using System.Windows.Forms;
using System.Drawing;
using unvell.ReoGrid.Chart;  

Первые шаги

Терминология, необходимая для работы с Reogrid, во многом аналогична таковой у Microsoft Excel. Здесь также присутствуют: Книги (Workbooks), Листы (WorkSheets), ячейки (Cells). В ячейках так же можно хранить как значения в основных форматах (текстовом, числовом, денежном, …), так и формулы с использованием ряда функций, которые обычно совместимы со своими аналогами из английской версии Excel.

Экземпляр компонента (он же экземпляр класса IWorkbook) изначально содержит один Лист. Он доступен по псевдониму CurrentWorksheet (текущий лист).

Далее подразумевается, что в основную форму проекта (Windows Forms) добавлен экземпляр компонента Reogrid с именем rgrid.

Новые листы книги могут создаваться как визуально – c использованием встроенного в Reogrid вкладочного элемента (TabControl), так и программно – путём создания экземпляра объекта WorkSheet с последующим его добавлением в состав книги.

Примеры манипулирования листами книги.

'VB
'Сброс книги (удаление всех листов и создание пустого нового)
rgrid.Reset()

'Создание экземпляра листа с именем по умолчанию
Dim sheet As Worksheet = rgrid.CreateWorksheet()
'или с указанным именем
Dim sheet1 As Worksheet = rgrid.CreateWorksheet("Мой_лист")

'Добавление листа в книгу в конец или с уточнением позиции
rgrid.AddWorksheet(sheet)
rgrid.InsertWorksheet(1, sheet)
'или
rgrid.Worksheets.Add(sheet)
rgrid.Worksheets.Insert(1, sheet)

'Определение количества листов в книге
Dim mycount As Integer = rgrid.Worksheets.Count

'Удаление листа с указанием экземпляра
rgrid.Worksheets.Remove(sheet)
'или
rgrid.RemoveWorksheet(sheet)
'или же с указанием позиции листа
rgrid.RemoveWorksheet(1)

'Копирование листа
Dim sheet2 As Worksheet = rgrid.CopyWorksheet(0, 1)

'Перемещение листа
rgrid.MoveWorksheet(0, 3)

'Сброс листа (удаление всех данных)
rgrid.CurrentWorksheet.Reset()
//C#
//Сброс книги (удаление всех листов и создание пустого нового)
rgrid.Reset();

//Создание экземпляра листа с именем по умолчанию
Worksheet sheet = rgrid.CreateWorksheet();
//или с указанным именем
Worksheet sheet1 = rgrid.CreateWorksheet("Мой_лист");

//Добавление листа в книгу в конец или с уточнением позиции
rgrid.AddWorksheet(sheet);
rgrid.InsertWorksheet(1, sheet);
//или
rgrid.Worksheets.Add(sheet);
rgrid.Worksheets.Insert(1, sheet);

//Определение количества листов в книге
int mycount = rgrid.Worksheets.Count;

//Удаление листа с указанием экземпляра
rgrid.Worksheets.Remove(sheet);
//или
rgrid.RemoveWorksheet(sheet);
//или же с указанием позиции листа
rgrid.RemoveWorksheet(1);

//Копирование листа
Worksheet sheet2 = rgrid.CopyWorksheet(0, 1);

//Перемещение листа
rgrid.MoveWorksheet(0, 3);

//Сброс листа (удаление всех данных)
rgrid.CurrentWorksheet.Reset();

Основные (простые) действия над ячейками и диапазонами ячеек.

'VB
'Занесение значения в ячейку
rgrid.CurrentWorksheet(1, 1) = "Какой-то текст"
rgrid.CurrentWorksheet("B2") = "Какой-то текст"

'Получение данных из ячейки (текст)
Dim strText As String = rgrid.CurrentWorksheet(1, 1).ToString
Dim strText1 As String = rgrid.CurrentWorksheet.Cells(1, 1).DisplayText

'Ввод и получение текстового представления формулы
rgrid.CurrentWorksheet.Cells(1, 1).Formula = "=A8+B8"
Dim strFormula As String = rgrid.CurrentWorksheet.Cells(1, 1).Formula

'Установка цвета фона (как пример изменения оформления ячейки)
rgrid.CurrentWorksheet.Cells("E5").Style.BackColor = Color.LightYellow

'Задание имени диапазона
Dim myRange = rgrid.CurrentWorksheet.DefineNamedRange("мой_диапазон", 3, 1, 5, 4)

'Запись данных в диапазон
myRange.Data = New Object(,) {{1, 2, 3, 4}, {0.1, 0.2, 0.3, 0.4}, {"яблоко", "банан", "апельсин", "груша"}}

'Задание ширины столбца
rgrid.CurrentWorksheet.SetColumnsWidth(1, 4, 100)

'Изменяем ширину заголовка
rgrid.CurrentWorksheet.ColumnHeaders(0).Width = 100 'Столбец A
rgrid.CurrentWorksheet.ColumnHeaders(1).Width = 500 'Столбец B
//C#
//Занесение значения в ячейку
rgrid.CurrentWorksheet[1, 1] = "Какой-то текст";
rgrid.CurrentWorksheet["B2"] = "Какой-то текст";

//Получение данных из ячейки (текст)
string strText1 = rgrid.CurrentWorksheet.Cells[1, 1].DisplayText;

//Ввод и получение текстового представления формулы
rgrid.CurrentWorksheet.Cells[1, 1].Formula = "=A8+B8";
string strFormula = rgrid.CurrentWorksheet.Cells[1, 1].Formula;

//Установка цвета фона (как пример изменения оформления ячейки)
rgrid.CurrentWorksheet.Cells["E5"].Style.BackColor = Color.LightYellow;

//Задание имени диапазона
var myRange = rgrid.CurrentWorksheet.DefineNamedRange("мой_диапазон", 3, 1, 5, 4);

//Запись данных в диапазон
myRange.Data = new object[, ] {{1,2,3,4},{0.1,0.2,0.3,0.4},{"яблоко","банан","апельсин","груша"}};

//Задание ширины столбца
rgrid.CurrentWorksheet.SetColumnsWidth(1, 4, 100);

//Изменяем ширину заголовка
rgrid.CurrentWorksheet.ColumnHeaders[0].Width = 100; //Столбец A
rgrid.CurrentWorksheet.ColumnHeaders[1].Width = 500; //Столбец B

Типы ячеек (Cell Types)

Для использования встроенных типов ячеек нужно импортировать соответствующее пространство имён: unvell.ReoGrid.CellTypes

Ячейки в ReoGrid могут иметь основу, унаследованную от CellBody или реализованную через интерфейс ICellBody.

ReoGrid содержит следующие встроенные типы ячеек:

  • Кнопка (Button);
  • Гиперссылка (Hyperlink);
  • Флажок (Check Box);
  • Радиокнопка (Radio Button);
  • Раскрывающийся список (Drop-down list);
  • Картинка (Image);
  • Индикатор выполнения (Numeric Progress).

reogrid_celltypes

Ячейка таблицы может быть дополнительно представлена активным элементом управления.

Кнопка (Button)

'VB
'1. Самый простой вариант кнопки (Button)
rgrid.CurrentWorksheet(1, 1) = New ButtonCell()
rgrid.CurrentWorksheet(1, 1) = "Привет"

'2. Кнопка с обработчиком события нажатия (Click)
Dim btn As ButtonCell = New ButtonCell("Привет!")
rgrid.CurrentWorksheet(1, 1) = New Object() {"Кнопка: ", btn}

'AddHandler btn.Click, AddressOf btn_Click
'Sub btn_Click(ByVal s, ByVal e)
'MsgBox("Кнопка нажата")
'End Sub
//C#
//1. Самый простой вариант кнопки (Button)
rgrid.CurrentWorksheet[1, 1] = new ButtonCell();
rgrid.CurrentWorksheet[1, 1] = "Привет";

//2. Кнопка с обработчиком события нажатия (Click)
ButtonCell btn = new ButtonCell("Привет!");
rgrid.CurrentWorksheet[1, 1] = new object[] {"Кнопка: ",btn};

/*btn.Click += btn_Click;
public void btn_Click(s, e)  { Interaction.MsgBox("Кнопка нажата");  }*/

Гиперссылка (Hyperlink)

Гиперссылка использует данные ячейки как адрес URL.

'VB
'1. Делаем гиперссылкой выделенный диапазон.
rgrid.CurrentWorksheet(rgrid.CurrentWorksheet.SelectionRange) = New HyperlinkCell("https://reogrid.net/ru", False)

'2. Настройка всех основных параметров с последующим применением к нужной ячейке.
Dim MyLink As New HyperlinkCell
MyLink.LinkColor = Color.Blue
MyLink.ActivateColor = Color.Green
MyLink.VisitedColor = Color.Red
MyLink.LinkURL = "http://yandex.ru"
MyLink.AutoNavigate = True
rgrid.CurrentWorksheet(1, 2) = MyLink

'Если по щелчку на гиперссылке должен происходить переход, то можно применить приведённый ниже код. Объявление переменной-гиперссылки может потребоваться перенести в область объявления переменной на уровне класса формы
Dim link = New HyperlinkCell("https://reogrid.net/ru")
rgrid.CurrentWorksheet(rgrid.CurrentWorksheet.SelectionRange) = New Object() {"Гиперссылка", link}

'AddHandler link.Click, AddressOf link_Click
'Sub link_Click(ByVal s, ByVal e)
'System.Diagnostics.Process.Start(rgrid.GetCellText(1, 2))
'End Sub
//C#
//1. Делаем гиперссылкой выделенный диапазон.
rgrid.CurrentWorksheet[rgrid.CurrentWorksheet.SelectionRange] = new HyperlinkCell("https://reogrid.net/ru", false);

//2. Настройка всех основных параметров с последующим применением к нужной ячейке.
HyperlinkCell MyLink = new HyperlinkCell();
MyLink.LinkColor = Color.Blue;
MyLink.ActivateColor = Color.Green;
MyLink.VisitedColor = Color.Red;
MyLink.LinkURL = "http://yandex.ru";
MyLink.AutoNavigate = true;
rgrid.CurrentWorksheet[1, 2] = MyLink;

//Если по щелчку на гиперссылке должен происходить переход, то можно применить приведённый ниже код. Объявление переменной-гиперссылки может потребоваться перенести в область объявления переменной на уровне класса формы
var link = new HyperlinkCell("https://reogrid.net/ru");
rgrid.CurrentWorksheet[rgrid.CurrentWorksheet.SelectionRange] = new object[] {"Гиперссылка",link};			
//link.Click += link_Click;
/*public void link_Click(s, e)
{
System.Diagnostics.Process.Start(rgrid.GetCellText(1, 2));
}*/

Флажок (CheckBox)

Для этой процедуры рекомендуется использовать таблицу без объединённых ячеек 😉 Сам Флажок занимает одну ячейку, поясняющую надпись к нему нужно располагать с другой ячейке.

'VB
Dim middleStyle = New WorksheetRangeStyle 'ReoGridStyleObject
middleStyle.Flag = PlainStyleFlag.Padding
middleStyle.Flag = PlainStyleFlag.HorizontalAlign
middleStyle.Padding = New unvell.ReoGrid.PaddingValue(2)
middleStyle.HAlign = ReoGridHorAlign.Center
Dim grayTextStyle = New WorksheetRangeStyle
grayTextStyle.Flag = PlainStyleFlag.TextColor
grayTextStyle.TextColor = Color.DimGray

Dim checkbox As CheckBoxCell = New CheckBoxCell()
rgrid.CurrentWorksheet.SetRangeStyles(7, 2, 1, 1, middleStyle)
rgrid.CurrentWorksheet.SetRangeStyles(8, 2, 1, 1, grayTextStyle)
rgrid.CurrentWorksheet(7, 1) = New Object() {"Флажок", checkbox, "Напомнить через 5 минут"}
rgrid.CurrentWorksheet(8, 2) = "(Изменить состояние элемента управления можно и при помощи клавиатуры)"

'Пример создания обработчика. Для его работы может потребоваться объявление переменной checkbox на уровне класса
'AddHandler checkbox.CheckChanged, AddressOf checkbox_CheckChanged
'Sub checkbox_CheckChanged(ByVal sender, ByVal e)
'MsgBox("Флажок переведён в состояние " & checkbox.ButtonState.ToString())
'End Sub
//C#
var middleStyle = new WorksheetRangeStyle();
middleStyle.Flag = PlainStyleFlag.Padding;
middleStyle.Flag = PlainStyleFlag.HorizontalAlign;
middleStyle.Padding = new unvell.ReoGrid.PaddingValue(2);
middleStyle.HAlign = ReoGridHorAlign.Center;
dynamic grayTextStyle = new WorksheetRangeStyle();
grayTextStyle.Flag = PlainStyleFlag.TextColor;
grayTextStyle.TextColor = Color.DimGray;

CheckBoxCell checkbox = new CheckBoxCell();
rgrid.CurrentWorksheet.SetRangeStyles(7, 2, 1, 1, middleStyle);
rgrid.CurrentWorksheet.SetRangeStyles(8, 2, 1, 1, grayTextStyle);
rgrid.CurrentWorksheet[7, 1] = new object[] {"Флажок",checkbox,	"Напомнить через 5 минут"};

rgrid.CurrentWorksheet[8, 2] = "(Изменить состояние элемента управления можно и при помощи клавиатуры)";
//Пример создания обработчика. Для его работы может потребоваться объявление переменной checkbox на уровне класса
//checkbox.CheckChanged += checkbox_CheckChanged;
/*public void checkbox_CheckChanged(sender, e)
{
Interaction.MsgBox("Флажок переведён в состояние " + checkbox.ButtonState.ToString());
}*/

Радиокнопка (RadioButton)

Как и флажки, радиокнопки занимают одну ячейку. Назовём ячейку с радиокнопкой радиоячейкой. После добавления радиоячеек в группу, они начинают работать вместе (может быть выбрана только одна радиокнопка)

'VB
rgrid.CurrentWorksheet(0, 1) = "Радиокнопки"

'Группа
Dim radioGroup As RadioButtonGroup = New RadioButtonGroup()

'Объявление ячеек и подключение их к группе
Dim rr1 As RadioButtonCell = New RadioButtonCell
rr1.RadioGroup = radioGroup
Dim rr2 As RadioButtonCell = New RadioButtonCell
rr2.RadioGroup = radioGroup
Dim rr3 As RadioButtonCell = New RadioButtonCell
rr3.RadioGroup = radioGroup

'Применяем к таблице
rgrid.CurrentWorksheet(1, 1) = rr1
rgrid.CurrentWorksheet(2, 1) = rr2
rgrid.CurrentWorksheet(3, 1) = rr3

'Ну и добавляем пояснения для пользователя
rgrid.CurrentWorksheet(1, 2) = "Яблоко"
rgrid.CurrentWorksheet(2, 2) = "Апельсин"
rgrid.CurrentWorksheet(3, 2) = "Банан"
//C#
rgrid.CurrentWorksheet[0, 1] = "Радиокнопки";

//Группа
RadioButtonGroup radioGroup = new RadioButtonGroup();

//Объявление ячеек и подключение их к группе
RadioButtonCell rr1 = new RadioButtonCell();
rr1.RadioGroup = radioGroup;
RadioButtonCell rr2 = new RadioButtonCell();
rr2.RadioGroup = radioGroup;
RadioButtonCell rr3 = new RadioButtonCell();
rr3.RadioGroup = radioGroup;

//Применяем к таблице
rgrid.CurrentWorksheet[1, 1] = rr1;
rgrid.CurrentWorksheet[2, 1] = rr2;
rgrid.CurrentWorksheet[3, 1] = rr3;

//Ну и добавляем пояснения для пользователя
rgrid.CurrentWorksheet[1, 2] = "Яблоко";
rgrid.CurrentWorksheet[2, 2] = "Апельсин";
rgrid.CurrentWorksheet[3, 2] = "Банан";

Раскрывающийся список (Drop-down List)

При выборе пункта он обновляет данные в своей ячейке. Получить выбранный пункт можно в обработчике события CellDataChanged:

'VB
Dim mydropdown As New DropdownListCell("Яблоко", "Апельсин", "Банан", "Груша", "Тыква", "Вишня", "Кокос")
rgrid.CurrentWorksheet(2, 3) = New Object() {"Список:", mydropdown}
//C#
DropdownListCell mydropdown = new DropdownListCell( "Яблоко","Апельсин","Банан","Груша","Тыква","Вишня","Кокос" );
rgrid.CurrentWorksheet[2, 3] = new object[] {"Список:",	mydropdown};

Картинка (Image)

В ячейку помещается графическое изображение

Свойство ImageCell ViewMode позволяет управлять отображением картинки в ячейке:

'VB
'Загрузка из файла
Dim image1 As Image = Image.FromFile("D:\myinfo\photo.png")
rgrid.CurrentWorksheet(1, 2) = New ImageCell(image1)

'Получение из ресурсов
rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.photo)
'или
rgrid.CurrentWorksheet("B3") = New ImageCell(My.Resources.photo)

'Создаём ImageCell с указанием параметра отображения
Dim img As Image = Image.FromFile("D:\myinfo\photo.png")
Dim imgCell As ImageCell = New ImageCell(img, ImageCellViewMode.Zoom)
rgrid.CurrentWorksheet("B3") = imgCell

'Также можно указать значение напрямую
imgCell.ViewMode = ImageCellViewMode.Clip

'И даже можно задать параметры выравнивания по вертикали и горизонтали:
Dim cell = rgrid.CurrentWorksheet.Cells("F6")
cell.Style.HAlign = ReoGridHorAlign.Center
cell.Style.VAlign = ReoGridVerAlign.Middle

'Ещё варианты 
rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.photo, ImageCellViewMode.Clip)
rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.photo, ImageCellViewMode.Stretch)
rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.photo, ImageCellViewMode.Zoom)
//C#
//Загрузка из файла
Image image1 = Image.FromFile("D:\\myinfo\\photo.png");
rgrid.CurrentWorksheet[1, 2] = new ImageCell(image1);

//Получение из ресурсов
rgrid.CurrentWorksheet[1, 2] = new ImageCell(reogrid_test_CSharp.Properties.Resources.photo);
//или
rgrid.CurrentWorksheet["B3"] = new ImageCell(reogrid_test_CSharp.Properties.Resources.photo);

//Создаём ImageCell с указанием параметра отображения
Image img = Image.FromFile("D:\\myinfo\\photo.png");
ImageCell imgCell = new ImageCell(img, ImageCellViewMode.Zoom);
rgrid.CurrentWorksheet["B3"] = imgCell;		
    
//Также можно указать значение напрямую
imgCell.ViewMode = ImageCellViewMode.Clip;
  
//И даже можно задать параметры выравнивания по вертикали и горизонтали:
var cell = rgrid.CurrentWorksheet.Cells["F6"];
cell.Style.HAlign = ReoGridHorAlign.Center;
cell.Style.VAlign = ReoGridVerAlign.Middle;

//Ещё варианты 
rgrid.CurrentWorksheet[1, 2] = new ImageCell(reogrid_test_CSharp.Properties.Resources.photo, ImageCellViewMode.Clip);
rgrid.CurrentWorksheet[1, 2] = new ImageCell(reogrid_test_CSharp.Properties.Resources.photo, ImageCellViewMode.Stretch);
rgrid.CurrentWorksheet[1, 2] = new ImageCell(reogrid_test_CSharp.Properties.Resources.photo, ImageCellViewMode.Zoom);		

Индикатор выполнения (Numeric Progress)

Позволяет отобразить результат выполнения какого-либо задания или его этапа.

'VB
Dim pc As ProgressCell = New ProgressCell
pc.TopColor = Color.Aqua
pc.BottomColor = Color.Black
rGrid.CurrentWorksheet(7, 2) = 0.8

rgrid.CurrentWorksheet(7, 2) = pc
//C#
ProgressCell pc = new ProgressCell();
pc.TopColor = Color.Aqua;
pc.BottomColor = Color.Black;
rgrid.CurrentWorksheet[7, 2] = 0.8;

rgrid.CurrentWorksheet[7, 2] = pc;

Формат ячеек

Для использования форматов данных нужно импортировать пространство имён unvell.ReoGrid.DataFormat

Указываем формат данных ячейки с помощью метода SetRangeDataFormat:

Встроенные шаблоны форматирования данных

Тип CellDataFormatFlag Аргумент
Числовой (Number) CellDataFormatFlag.Number NumberDataFormatter.NumberFormatArgs
Дата/Время (DateTime) CellDataFormatFlag.DateTime DateTimeDataFormatter.DateTimeFormatArgs
Процентный (Percent) CellDataFormatFlag.Percent PercentDataFormatter.PercentFormatArgs
Денежный (Currency) CellDataFormatFlag.Currency CurrencyDataFormatter.CurrencyFormatArgs
Текстовый (Text) CellDataFormatFlag.Text Нет
'VB
'Числовой формат данных (Number)
Dim FFNum As New NumberDataFormatter.NumberFormatArgs
FFNum.DecimalPlaces = 4 'Количество знаков после запятой/точки: 0,1234
FFNum.NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets 'стиль отрицательных чисел
FFNum.UseSeparator = True 'Использовать разделитель: 123,456
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Number, FFNum)

'Дата/Время (DateTime)
Dim FFDT As New DateTimeDataFormatter.DateTimeFormatArgs
FFDT.CultureName = "ru-RU" 'Культура "ru-RU"
FFDT.Format = "dd/MM/yyyy" 'Шаблон 
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.DateTime, FFDT)

'Процентный (Percent)
Dim FFPer As New NumberDataFormatter.NumberFormatArgs
FFPer.DecimalPlaces = 2 'Количество знаков после запятой или точки
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Percent, FFPer)

'Денежный (Currency)
Dim FFCur As New CurrencyDataFormatter.CurrencyFormatArgs
FFCur.CultureEnglishName = "ru-RU" 'Культура "ru-RU"
FFCur.DecimalPlaces = 1 'Количество знаков после запятой/точки
FFCur.Symbol = "р." 'Символ р.
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Currency, FFCur)

'Текстовый (Text)
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Text, Nothing)
//C#
//Числовой формат данных (Number)
NumberDataFormatter.NumberFormatArgs FFNum = new NumberDataFormatter.NumberFormatArgs();
FFNum.DecimalPlaces = 4; //Количество знаков после запятой/точки: 0,1234
FFNum.NegativeStyle = NumberDataFormatter.NumberNegativeStyle.RedBrackets; //стиль отрицательных чисел
FFNum.UseSeparator = true; //Использовать разделитель: 123,456
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Number, FFNum);

//Дата/Время (DateTime)
DateTimeDataFormatter.DateTimeFormatArgs FFDT = new DateTimeDataFormatter.DateTimeFormatArgs();
FFDT.CultureName = "ru-RU"; //Культура "ru-RU"
FFDT.Format = "dd/MM/yyyy"; //Шаблон
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.DateTime, FFDT);    

//Процентный (Percent)
NumberDataFormatter.NumberFormatArgs FFPer = new NumberDataFormatter.NumberFormatArgs();
FFPer.DecimalPlaces = 2; //Количество знаков после запятой или точки
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Percent, FFPer);

//Денежный (Currency)
CurrencyDataFormatter.CurrencyFormatArgs FFCur = new CurrencyDataFormatter.CurrencyFormatArgs();
FFCur.CultureEnglishName = "ru-RU"; //Культура "ru-RU"
FFCur.DecimalPlaces = 1; //Количество знаков после запятой/точки
FFCur.Symbol = "р."; //Символ р.
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Currency, FFCur);
    
//Текстовый (Text)
rgrid.CurrentWorksheet.SetRangeDataFormat(ReoGridRange.EntireRange, CellDataFormatFlag.Text, null);

Инициализация списков

Этот фрагмент кода можно включить в состав процедуры Form_Load

Управление параметрами книги или листа

Существуют параметры для всей книги и для отдельных её листов. Для управления параметром существует три метода: универсальный (нужно указать параметр типаWorkbookSettings для книги, WorksheetSettings для листа, а также булевое значение: True = включить, False = выключить), включение и выключение. Для последних вариантов в скобках нужно указать включаемый или отключаемый параметр типа WorkbookSettings или WorksheetSettings.

Узнать значение параметра можно с помощью метода HasSetting

Параметры книги (WorkbookSettings) и листа (WorksheetSettings).

Варианты включения и выключения параметров, получение состояния параметра, а также комбинирование параметров. В качестве примера взят параметр WorkbookSettings.View_ShowSheetTabControl

'VB
'1. Книга
rgrid.SetSettings(WorkbookSettings.View_ShowSheetTabControl, True) 'Универсальный (True - включение, False - выключение)
rgrid.EnableSettings(WorkbookSettings.View_ShowSheetTabControl) 'Включение
rgrid.DisableSettings(WorkbookSettings.View_ShowSheetTabControl) 'Выключение
Dim bBook As Boolean = rgrid.HasSettings(WorkbookSettings.View_ShowSheetTabControl) 'Получаем текущее значение параметра

'2. Лист
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_Default, True) 'Универсальный вариант
rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.Behavior_Default) 'Включение
rgrid.CurrentWorksheet.DisableSettings(WorksheetSettings.Behavior_Default) 'Выключение
Dim bSheet As Boolean = rgrid.CurrentWorksheet.HasSettings(WorksheetSettings.Behavior_Default) 'Получаем текущее значение параметра
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_Default Or WorksheetSettings.Edit_Readonly, False) 'Выключение сразу двух параметров
//C#
//1. Книга
rgrid.SetSettings(WorkbookSettings.View_ShowSheetTabControl, true); //Универсальный (true - включение, false - выключение)
rgrid.EnableSettings(WorkbookSettings.View_ShowSheetTabControl); //Включение
rgrid.DisableSettings(WorkbookSettings.View_ShowSheetTabControl); //Выключение
bool bBook = rgrid.HasSettings(WorkbookSettings.View_ShowSheetTabControl); //Получаем текущее значение параметра

//2. Лист
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_Default, true); //Универсальный вариант  (true - включение, false - выключение)
rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.Behavior_Default); //Включение
rgrid.CurrentWorksheet.DisableSettings(WorksheetSettings.Behavior_Default); //Выключение
bool bSheet  = rgrid.CurrentWorksheet.HasSettings(WorksheetSettings.Behavior_Default); //Получаем текущее значение параметра
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_Default | WorksheetSettings.Edit_Readonly, false);//Выключение сразу двух параметров

Пример настройки книги и листа с пояснениями в комментариях

'VB
'Включаем все параметры книги
rgrid.SetSettings(WorkbookSettings.View_ShowSheetTabControl, True) 'Показывать вкладки-листы
rgrid.SetSettings(WorkbookSettings.View_ShowScrolls, True) 'Показывать полосы прокрутки
rgrid.SetSettings(WorkbookSettings.View_ShowHorScroll, True) 'Показывать горизонтальную полосу прокрутки
rgrid.SetSettings(WorkbookSettings.View_ShowVerScroll, True) 'Показывать вертикальную полосу прокрутки

'Включаем все параметры листа
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_MouseWheelToScroll, True) 'Разрешить прокрутку таблицы колесом мыши
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_MouseWheelToZoom, True) 'Разрешить пользователю масштабировать таблицу колесом мыши
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_ShortcutKeyToZoom, True) 'Разрешить пользователю масштабировать таблицу горячей клавишей (ctrl + plus,minus)
'rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_DragToMoveColumnHeader, True) 'Разрешить пользователю перемещать весь столбец перетаскиванием мышью (Зарезервировано)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_ScrollToFocusCell, True) 'Всегда разрешать автоматическую прокрутку листа для показа выбранных ячеек (имеющих фокус)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks, True) 'Разрешить пользователю вставлять, удалять или регулировать разделители страниц листа

'Правка
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_Readonly, True) 'Элемент управления будет работать в режиме "Только для чтения". Внесение каких-либо изменений запрещено
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AutoFormatCell, True) 'Разрешить форматировать данные после правки текста пользователем
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_FriendlyPercentInput, True) 'Разрешить отображение сомвола "процент" при вводе пользоателем значения ячейки с "процентным" форматом данных
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AutoAdjustRowHeight, True) 'Разрешить настройку высоты строк при увеличении пользователем размера (кегля) шрифта
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustRowHeight, True) 'Разрешить пользователю настраивать высоту строк с помощью мыши
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustColumnWidth, True) 'Разрешить пользователю настраивать длину столбца с помощью мыши (перетаскиванием)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustColumnWidth, True) 'Разрешить пользователю регулировать ширину столбца перетаскиванием мышью
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_DragSelectionToMoveCells, True) 'Разрешить перемещать или копировать выделенный диапазон перетаскиванием мышью

'Отображение, внешний вид
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowColumnHeader, True) 'Показывать заголовки столбцов
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowRowHeader, True) 'Показывать заголовки строк
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowHorizontalRuler, True) 'Показывать горизонтальную линейку (зарезервировано)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowVerticalRuler, True) 'Показывать вертикальную линейку (зарезервировано)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowGridLine, True) 'Показывать линии сетки
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowHiddenCellLine, True) 'Разрешить отображение линии на скрытом заголовке строк
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowRowOutlines, True) 'Разрешить показывать внешние границы строк, если они не замкнуты (outlines exiting)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowColumnOutlines, True) 'Разрешить показ внешних границ столбцов, если они незамкнуты (outlines exiting)
'rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_MouseWheelToScroll, True) 'Разрешить прокрутку листа колесом мыши
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowPageBreaks, True) 'Разрешить отображать линии разделителя страниц
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowCellTextOverflow, True) 'Сделать декст ячеек отображаемым только внутри ячейки, не перекрывая соседние ячейки

'Подсчёт формул
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoUpdateReferenceCell, True) 'Разрешить автоматическое обновление ссылок на ячейки в формуле
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoPickingCellAddress, True) 'Разрешить выбирать адреса выделенных ячеек во время правки формулы (0.9.1 зарезервировано)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoRebuild, True) 'Разрешить автоматически корректировать или перестраивать формулу (0.9.1 зарезервировано)
//C#
//Включаем все параметры книги
rgrid.SetSettings(WorkbookSettings.View_ShowSheetTabControl, true); //Показывать вкладки-листы
rgrid.SetSettings(WorkbookSettings.View_ShowScrolls, true); //Показывать полосы прокрутки
rgrid.SetSettings(WorkbookSettings.View_ShowHorScroll, true); //Показывать горизонтальную полосу прокрутки
rgrid.SetSettings(WorkbookSettings.View_ShowVerScroll, true); //Показывать вертикальную полосу прокрутки

//Включаем все параметры листа
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_MouseWheelToScroll, true); //Разрешить прокрутку таблицы колесом мыши
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_MouseWheelToZoom, true); //Разрешить пользователю масштабировать таблицу колесом мыши
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_ShortcutKeyToZoom, true); //Разрешить пользователю масштабировать таблицу горячей клавишей (ctrl + plus,minus)
//rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_DragToMoveColumnHeader, true); //Разрешить пользователю перемещать весь столбец перетаскиванием мышью (Зарезервировано)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_ScrollToFocusCell, true); //Всегда разрешать автоматическую прокрутку листа для показа выбранных ячеек (имеющих фокус)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks, true); //Разрешить пользователю вставлять, удалять или регулировать разделители страниц листа

//Правка
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_Readonly, true); //Элемент управления будет работать в режиме "Только для чтения". Внесение каких-либо изменений запрещено
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AutoFormatCell, true); //Разрешить форматировать данные после правки текста пользователем
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_FriendlyPercentInput, true); //Разрешить отображение сомвола "процент" при вводе пользоателем значения ячейки с "процентным" форматом данных
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AutoAdjustRowHeight, true); //Разрешить настройку высоты строк при увеличении пользователем размера (кегля) шрифта
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustRowHeight, true); //Разрешить пользователю настраивать высоту строк с помощью мыши
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustColumnWidth, true); //Разрешить пользователю настраивать длину столбца с помощью мыши (перетаскиванием)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_AllowAdjustColumnWidth, true); //Разрешить пользователю регулировать ширину столбца перетаскиванием мышью
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Edit_DragSelectionToMoveCells, true); //Разрешить перемещать или копировать выделенный диапазон перетаскиванием мышью

//Отображение, внешний вид
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowColumnHeader, true); //Показывать заголовки столбцов
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowRowHeader, true); //Показывать заголовки строк
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowHorizontalRuler, true); //Показывать горизонтальную линейку (зарезервировано)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowVerticalRuler, true); //Показывать вертикальную линейку (зарезервировано)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowGridLine, true); //Показывать линии сетки
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowHiddenCellLine, true); //Разрешить отображение линии на скрытом заголовке строк
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowRowOutlines, true); //Разрешить показывать внешние границы строк, если они не замкнуты (outlines exiting)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowColumnOutlines, true); //Разрешить показ внешних границ столбцов, если они незамкнуты (outlines exiting)
//rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_MouseWheelToScroll, true); //Разрешить прокрутку листа колесом мыши
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowPageBreaks, true); //Разрешить отображать линии разделителя страниц
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowCellTextOverflow, true); //Сделать декст ячеек отображаемым только внутри ячейки, не перекрывая соседние ячейки

//Подсчёт формул
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoUpdateReferenceCell, true); //Разрешить автоматическое обновление ссылок на ячейки в формуле
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoPickingCellAddress, true); //Разрешить выбирать адреса выделенных ячеек во время правки формулы (0.9.1 зарезервировано)
rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.Formula_AutoRebuild, true); //Разрешить автоматически корректировать или перестраивать формулу (0.9.1 зарезервировано)

События листа

Событие Когда возникает
WorksheetCreated После создания листа
WorksheetInserted После вставки листа
WorksheetRemoved После удаления листа
BeforeWorksheetNameChange Перед переименованием листа
WorksheetNameChanged После переименования листа

События ячеек

Событие Когда возникает
BeforeCellEdit Перед любыми изменениями в ячейках в режиме правки
AfterCellEdit Когда какие-либо ячейки правятся пользователем
CellDataChanged Когда изменяются данные в ячейках
CellMouseEnter Когда указатель мыши перемещается в ячейку и зависает над ней
CellMouseLeave Когда указатель мыши покидает ячейку
CellMouseDown Когда происходит нажатие кнопки мыши, а указатель находится в ячейке
CellMouseUp Когда происходит отпускание кнопки мыши, а указатель находится в ячейке
CellMouseMove Когда указатель мыши движется внутри ячейки

События строк и столбцов

Событие Когда возникает
RowInserted Когда пользователь вставляет строки
RowDeleted Когда пользователь удаляет строки
ColInserted Когда пользователь вставляет столбцы
ColDeleted Когда пользователь вставляет столбцы

События диапазонов ячеек

Событие Когда возникает
RangeMerged Когда объединяются ячейки диапазона
RangeUnmerged Когда отменяется объединение ячеек диапазона
RangeStyleChanged Когда происходит установка стиля

События границ

Событие Когда возникает
BorderAdded Когда добавляются границы
BorderRemoved Когда удаляются границы

События выделенного

Событие Когда возникает
SelectionRangeChanged При изменении диапазона выделения
SelectionRangeChanging Во время изменения выделения мышью
SelectionModeChanged При изменении режима выделения
SelectionStyleChanged При изменении стиля выделения
SelectionForwardDirectionChanged При изменении направления перемещения фокуса ввода
SelectionMovedForward Когда выделение переносится в следующую позицию
HoverPosChanged Когда указатель мыши движется над ячейками
FocusPosChanged Когда фокус переходит к другой ячейке

События внешних границ (Outline)

Событие Когда возникает
OutlineAdded Когда в таблицу добавлена внешняя граница
OutlineRemoved Когда внешняя граница удалена из таблицы
BeforeOutlineCollapse Когда пользователь щёлкает на кнопке “-” за пределами таблицы – для её сворачивания
AfterOutlineCollapse Когда граница замкнулась
BeforeOutlineExpand Когда пользователь щёлкает на кнопке “+” за пределами таблицы – для её разворачивания
AfterOutlineExpand Когда внешняя граница развёрнута

События действий (Action)

Событие Когда возникает
ActionPerformed При выполнении любых действий
Undid Когда действие undid
Redid Когда действие redid

События элемента управления

Событие Когда возникает
GridScaled Во время масштабирования элемента управления (уменьшение/увеличение масштаба)
FileLoaded Когда в элемент управления загрузились данные из файлового потока (load from given stream will not fire this event)
FileSaved Когда содержимое элемента управления сохранено в файловом потоке (save into given stream will not fire this event)
Resetted Когда состояние элемента управление сбрасывается к значению по умолчанию
CellsFrozen Когда в таблице фиксируются (замораживаются) какие-либо ячейки
CellsUnfreeze Когда отменена фиксация (заморозка)

События буфера обмена

Событие Когда возникает
BeforeCopy Перед операцией копирования
AfterCopy Во время копирования диапазона из буфера обмена (Clipboard)
BeforePaste Перед операцией вставки
AfterPaste Во время вставки из буфера обмена (Clipboard)
BeforeCut Перед операцией вырезания
AfterCut Когда пользователь вырезает содержимое диапазона
OnPasteError При возникновении ошибок в процессе операции вставки

Локализация встроенных элементов

'VB
'Локализация
unvell.ReoGrid.LanguageResource.Button_Cancel = "Отмена"
unvell.ReoGrid.LanguageResource.Button_OK = "ОК"
unvell.ReoGrid.LanguageResource.Filter_SelectAll = "Выбрать все"
unvell.ReoGrid.LanguageResource.Filter_SortAtoZ = "Сортировка от А до Я"
unvell.ReoGrid.LanguageResource.Filter_SortZtoA = "Сортировка от Я до А"
unvell.ReoGrid.LanguageResource.Menu_DeleteSheet = "Удалить"
unvell.ReoGrid.LanguageResource.Menu_InsertSheet = "Вставить"
unvell.ReoGrid.LanguageResource.Menu_RenameSheet = "Переименовать"
unvell.ReoGrid.LanguageResource.Sheet = "Лист"
unvell.ReoGrid.LanguageResource.Sheet_RenameDialog_NameLabel = "Имя"
unvell.ReoGrid.LanguageResource.Sheet_RenameDialog_Title = "Переименование"

rgrid.CurrentWorksheet.Name = "Лист 1"
//C#
//Локализация
unvell.ReoGrid.LanguageResource.Button_Cancel = "Отмена";
unvell.ReoGrid.LanguageResource.Button_OK = "ОК";
unvell.ReoGrid.LanguageResource.Filter_SelectAll = "Выбрать все";
unvell.ReoGrid.LanguageResource.Filter_SortAtoZ = "Сортировка от А до Я";
unvell.ReoGrid.LanguageResource.Filter_SortZtoA = "Сортировка от Я до А";
unvell.ReoGrid.LanguageResource.Menu_DeleteSheet = "Удалить";
unvell.ReoGrid.LanguageResource.Menu_InsertSheet = "Вставить";
unvell.ReoGrid.LanguageResource.Menu_RenameSheet = "Переименовать";
unvell.ReoGrid.LanguageResource.Sheet = "Лист";
unvell.ReoGrid.LanguageResource.Sheet_RenameDialog_NameLabel = "Имя";
unvell.ReoGrid.LanguageResource.Sheet_RenameDialog_Title = "Переименование";

rgrid.CurrentWorksheet.Name = "Лист 1";

Вариант инициализации списков

Все компоненты с префиксом cbo являются раскрывающимися списками ComboBox

Заполняем списки перечнем кеглей (размеров) шрифта, гарнитур (семейств) шрифтов и количества процентов

'VB
'Кегли
cboFontSize.Items.AddRange({8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 28, 32, 36, 48, 60, 72, 96, 100})

'Гарнитуры
cboFontName.DataSource = FontFamily.Families
cboFontName.ValueMember = "Name"
cboFontName.Text = "Выберите гарнитуру"

'Масштабирование
cboZoom.Items.AddRange({"25%", "50%", "75%", "100%", "125%", "150%", "200%", "300%", "400%"})
//C#
//Кегли
cboFontSize.Items.AddRange(new string[] {"8", "9","10", "11", "12", "14", "16", "18", "20", "22", "24", "28", "32", "36", "48", "60", "72", "96", "100"});

//Гарнитуры
cboFontName.DataSource = FontFamily.Families;
cboFontName.ValueMember = "Name";
cboFontName.Text = "Выберите гарнитуру";

//Масштабирование
cboZoom.Items.AddRange(new string[] {"25%", "50%", "75%", "100%", "125%", "150%", "200%", "300%", "400%"});	

Cовместимость с форматом Excel

Reogrid имеет повышенную совместимость с форматом Excel 2007/2010 (xlsx): возможно как считывание данных, так и их запись. При этом поддерживаются основные стили оформления ячеек, встроенные плавающие изображения и некоторые типы диаграмм. Также ожидается поддержка совместимости с LibreOffice Calc для этого же формата.

Reogrid представляет собой книгу (Workbook), которая может содержать вложенные листы-таблицы (WorkSheets). Для переключения между листами служит встроенный отключаемый вкладочный элемент (TabControl). Активный лист имеет псевдоним CurrentWorkSheet.

В примерах будут встречаться примеры загрузки и сохранения данных, используя формат Microsoft Excel. Наличие установленной копии офисного пакета от Майкрософт не требуется.

Поддерживаемые встроенные функции, многие из которых совместимы с Excel

Функция Reogrid Функция Excel (Русская версия) Описание
Статистические (Statistics)
AVERAGE СРЗНАЧ Возвращает среднее арифметическое значение указанных аргументов
AVERAGEIF СРЗНАЧЕСЛИ Возвращает среднее арифметическое значение указанных аргументов, которые отвечают единому заданному критерию
COUNT Возвращает количество ячеек, содержащих числа, и подсчитывает числа в списке аргументов
COUNTIF Возвращает количество ячеек в заданном диапазоне, которые отвечают единому заданному критерию
SUM СУММ Возвращает сумму значений чисел. Пример: SUM(B11:E12)
SUMIF СУММЕСЛИ Возвращает сумму значений в диапазоне, которые соответствуют указанным критериям
Адресные (Address)
ADDRESS АДРЕС Возвращает ссылку на отдельную ячейку листа в виде текста
COLUMNS ЧИСЛСТОЛБ Возвращает количество столбцов в ссылке (reference) или массиве
INDEX ИНДЕКС Возвращает значение или ссылку (reference) на значение из таблицы или диапазона ячеек
INDIRECT ДВССЫЛ Возвращает ссылку, заданную текстовой строкой
ROWS ЧСТРОК Возвращает количество строк в ссылке (reference) или массиве
Математические вычисления (Math Calculation)
ABS Возвращает абсолютное значение числа
ACOS Возвращает арккосинус числа
ASIN Возвращает арксинус числа
ATAN Возвращает арктангенс числа
ATAN2 Возвращает арктангенс для заданных координат x и y
CEILING Возвращает число, округляемое в сторону увеличения, от нуля до ближайшего кратного указанному значению
COS Возвращает косинус числа
EXP Возвращает число e, возведенное в указанную степень
FLOOR Округление числа до ближайшего меньшего значения
MAX МАКС Возвращает наибольшее значение в списке аргументов
MIN МИН Возвращает наименьшее значение в списке аргументов
ROUND ОКРУГЛ Возвращает число, округленное с требуемой точностью. Примеры: ROUND(B8), ROUND(E8, 2)
SIN Возвращает синус числа
TAN Возвращает тангенс числа
Дата и время (DateTime)
DAY ДЕНЬ Преобразует дату в числовом формате в день месяца
DAYS ? ?
HOUR ЧАС Преобразует дату в числовом формате в часы
MILLISECOND Преобразует дату в числовом формате в миллисекунды
MINUTE МИНУТЫ Преобразует дату в числовом формате в минуты
MONTH МЕСЯЦ Преобразует дату в числовом формате в месяцы
NOW Возвращает текущие дату и время в числовом формате
SECOND СЕКУНДЫ Преобразует дату в числовом формате в секунды
TIME ВРЕМЯ Возвращает заданное время в числовом формате
TODAY СЕГОДНЯ Возвращает текущую дату в числовом формате
YEAR ГОД Преобразует дату в числовом формате в год
Строковые (String)
FIND НАЙТИ Поиск вхождения одного текстового значения в другое (с учетом регистра)
LEFT ЛЕВСИМВ Возвращают крайние слева знаки текстового значения
LEN ДЛСТР Возвращает количество символов в текстовой строке
LENB ДЛИНБ Возвращает количество байт, используемых для представления знаков в текстовой строке
LOOKUP ПРОСМОТР Возвращает значение либо из одной строки, либо одного столбца диапазона или массива
LOWER СТРОЧН Преобразует все буквы текста в строчные
MID ПСТР Возвращают заданное число знаков из строки текста, начиная с указанной позиции
RIGHT ПРАВСИМВ Возвращают крайние справа знаки текстовой строки
TRIM СЖПРОБЕЛЫ Удаляет из текста пробелы
UPPER ПРОПИСН Преобразует все буквы текста в прописные
Условия (Conditions)
AND Логическое И
IF С проверкой на условие
NOT Логическое отрицание
OR Логическое ИЛИ

Функции для строки формул (заполняем ComboBox с именем cboFunctions)

'VB
cboFunctions.Items.Add("AVERAGE(,)")
cboFunctions.Items.Add("AVERAGEIF()")
cboFunctions.Items.Add("COUNT()")
cboFunctions.Items.Add("COUNTIF(,)")
cboFunctions.Items.Add("SUM()")
cboFunctions.Items.Add("SUMIF(,)")

cboFunctions.Items.Add("AND")
cboFunctions.Items.Add("IF")
cboFunctions.Items.Add("NOT")
cboFunctions.Items.Add("OR")

cboFunctions.Items.Add("ADDRESS(,)")
cboFunctions.Items.Add("COLUMNS()")
cboFunctions.Items.Add("INDEX(,)")
cboFunctions.Items.Add("INDIRECT()")
cboFunctions.Items.Add("ROWS()")

cboFunctions.Items.Add("ABS()")
cboFunctions.Items.Add("ACOS()")
cboFunctions.Items.Add("ASIN()")
cboFunctions.Items.Add("ATAN()")
cboFunctions.Items.Add("ATAN2()")
cboFunctions.Items.Add("CEILING(,)")
cboFunctions.Items.Add("COS()")
cboFunctions.Items.Add("EXP()")
cboFunctions.Items.Add("FLOOR()")
cboFunctions.Items.Add("MAX()")
cboFunctions.Items.Add("MIN()")
cboFunctions.Items.Add("ROUND(,)")
cboFunctions.Items.Add("SIN()")
cboFunctions.Items.Add("TAN()")

cboFunctions.Items.Add("DAY()")
cboFunctions.Items.Add("DAYS()")
cboFunctions.Items.Add("HOUR()")
cboFunctions.Items.Add("MILLISECOND()")
cboFunctions.Items.Add("MINUTE()")
cboFunctions.Items.Add("MONTH()")
cboFunctions.Items.Add("NOW()")
cboFunctions.Items.Add("SECOND()")
cboFunctions.Items.Add("TIME()")
cboFunctions.Items.Add("TODAY()")
cboFunctions.Items.Add("YEAR()")

cboFunctions.Items.Add("FIND()")
cboFunctions.Items.Add("LEFT()")
cboFunctions.Items.Add("LEN()")
cboFunctions.Items.Add("LENB()")
cboFunctions.Items.Add("LOOKUP")
cboFunctions.Items.Add("LOWER()")
cboFunctions.Items.Add("MID()")
cboFunctions.Items.Add("RIGHT()")
cboFunctions.Items.Add("TRIM()")
cboFunctions.Items.Add("UPPER()")
//C#
cboFunctions.Items.Add("AVERAGE(,)");
cboFunctions.Items.Add("AVERAGEIF()");
cboFunctions.Items.Add("COUNT()");
cboFunctions.Items.Add("COUNTIF(,)");
cboFunctions.Items.Add("SUM()");
cboFunctions.Items.Add("SUMIF(,)");

cboFunctions.Items.Add("AND");
cboFunctions.Items.Add("IF");
cboFunctions.Items.Add("NOT");
cboFunctions.Items.Add("OR");

cboFunctions.Items.Add("ADDRESS(,)");
cboFunctions.Items.Add("COLUMNS()");
cboFunctions.Items.Add("INDEX(,)");
cboFunctions.Items.Add("INDIRECT()");
cboFunctions.Items.Add("ROWS()");

cboFunctions.Items.Add("ABS()");
cboFunctions.Items.Add("ACOS()");
cboFunctions.Items.Add("ASIN()");
cboFunctions.Items.Add("ATAN()");
cboFunctions.Items.Add("ATAN2()");
cboFunctions.Items.Add("CEILING(,)");
cboFunctions.Items.Add("COS()");
cboFunctions.Items.Add("EXP()");
cboFunctions.Items.Add("FLOOR()");
cboFunctions.Items.Add("MAX()");
cboFunctions.Items.Add("MIN()");
cboFunctions.Items.Add("ROUND(,)");
cboFunctions.Items.Add("SIN()");
cboFunctions.Items.Add("TAN()");

cboFunctions.Items.Add("DAY()");
cboFunctions.Items.Add("DAYS()");
cboFunctions.Items.Add("HOUR()");
cboFunctions.Items.Add("MILLISECOND()");
cboFunctions.Items.Add("MINUTE()");
cboFunctions.Items.Add("MONTH()");
cboFunctions.Items.Add("NOW()");
cboFunctions.Items.Add("SECOND()");
cboFunctions.Items.Add("TIME()");
cboFunctions.Items.Add("TODAY()");
cboFunctions.Items.Add("YEAR()");

cboFunctions.Items.Add("FIND()");
cboFunctions.Items.Add("LEFT()");
cboFunctions.Items.Add("LEN()");
cboFunctions.Items.Add("LENB()");
cboFunctions.Items.Add("LOOKUP");
cboFunctions.Items.Add("LOWER()");
cboFunctions.Items.Add("MID()");
cboFunctions.Items.Add("RIGHT()");
cboFunctions.Items.Add("TRIM()");
cboFunctions.Items.Add("UPPER()");

Формула (Formula)

Что следует учитывать при работе с формулами

  1. Данные в ячейке, начинающиеся с символа “=”, автоматически обрабатываются как формула.
  2. Значения ячеек с формулами автоматически обновляются при изменении значений в связанных с ними ячейках.
  3. Данные в ячейке, начинающиеся с символа (‘) не будут восприниматься как формула.
  4. Язык формул ReoGrid чувствителен к регистру, все функции, совместимыe с Microsoft Excel, должны указываться в ВЕРХНЕМ регистре, например SUM и AVERAGE, вызов функции и использованием имён вида “sum” приведёт к возникновению исключения ‘function not found’ (функция не найдена).

Ссылки на ячейки (References of Cell)

Как и Microsoft Excel, ReoGrid поддерживает ссылки на ячейку и диапазон.

'VB
'Пример формулы со ссылками на ячейки (A1, B1) и диапазон (A1:C3)
rgrid.CurrentWorksheet("H8") = "=A1+B1-SUM(A1:C3)+AVERAGE(D1:H5)"

'Получение списка ссылок из ячейки
Dim rangeList = rgrid.CurrentWorksheet.GetCellFormulaReferenceRanges("H8")
//C#
//Пример формулы со ссылками на ячейки (A1, B1) и диапазон (A1:C3)
rgrid.CurrentWorksheet["H8"] = "=A1+B1-SUM(A1:C3)+AVERAGE(D1:H5)";

//Получение списка ссылок из ячейки
var rangeList = rgrid.CurrentWorksheet.GetCellFormulaReferenceRanges("H8");

Трассировка зависимостей (Trace Precedents)

Возможность трассировки зависимостей ячеек в формулах на манер Excel доступна с версии 0.8.6

Для включения трассировки, необходимо установить для параметра ячейки TraceFormulaPrecedent значение True

При изменении формулы трассирующие стрелки исчезнут.

'VB
rgrid.CurrentWorksheet("C2") = 10
rgrid.CurrentWorksheet("C3") = 5
Dim cell As ReoGridCell = rgrid.CurrentWorksheet.Cells("C5")
cell.Formula = "=C2+C3"
cell.TraceFormulaPrecedents = True

'или путём вызова TraceCellPrecedents:
rgrid.CurrentWorksheet.TraceCellPrecedents("C5")

'Следующий код позволит постоянно отображать трассирующие стрелки
'Добавляем обработчик события
'AddHandler rgrid.CellDataChanged, AddressOf rgrid_CellDataChanged
'Sub rgrid_CellDataChanged(ByVal sender As Object, ByVal e As unvell.ReoGrid.Events.CellEventArgs)
'e.Cell.TraceFormulaPrecedents = True
'End Sub
//C#
rgrid.CurrentWorksheet["C2"] = 10;
rgrid.CurrentWorksheet["C3"] = 5;
ReoGridCell cell = rgrid.CurrentWorksheet.Cells["C5"];
cell.Formula = "=C2+C3";
cell.TraceFormulaPrecedents = true;

//или путём вызова TraceCellPrecedents:
rgrid.CurrentWorksheet.TraceCellPrecedents("C5");

//Следующий код позволит постоянно отображать трассирующие стрелки
//rgrid.CellDataChanged += (s, e) => e.Cell.TraceFormulaPrecedents = true;

Трассировка зависимостей (Trace Dependents)

Определение именованного диапазона, установка значений именованного диапазона и применение формулы суммирования к именованному диапазону

'VB
Dim namedRange As NamedRange = rgrid.CurrentWorksheet.DefineNamedRange("items", "B2:E2")
namedRange.Data = New Object() {1, 3, 5, 7}
rgrid.CurrentWorksheet("F2") = "=SUM(items)"
//C#
NamedRange namedRange = rgrid.CurrentWorksheet.DefineNamedRange("items", "B2:E2");
namedRange.Data = new object[] {1,3,5,7}; 
rgrid.CurrentWorksheet["F2"] = "=SUM(items)";

1. Переносим выбранную функцию из списка в текстовое поле формулы. Для этого используем обработчик события SelectedIndexChanged для раскрывающегося списка cboFunctions

'VB
txtFormula.Text &= cboFunctions.Text
//C#
txtFormula.Text += cboFunctions.Text;

Переносим формулу в выбранную ячейку. Используется обработчик события KeyDown для текстового поля форулы txtFormula

Изменение формулы по в текстовом поле (обработка события txtFormula_KeyDown)

'VB
If e.KeyCode = Keys.Enter Then
    rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).Formula = txtFormula.Text
End If
//C#
if (e.KeyCode == Keys.Enter) {
	rgrid.CurrentWorksheet.Cells[rgrid.CurrentWorksheet.FocusPos].Formula = txtFormula.Text;
}

Получение информации из выбранной пользователем ячейки. Для этого используется обработчик события FocusPosChanged компонента Reogrid.

'VB
'Получаем значение поля Formula
Dim strFormula As String = rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).Formula

'Если поле не пустое - заносим его значение в строку формул, в поле списка функций заносим основные данные из ячейки
If Len(strFormula) >= 0 Then
    txtFormula.Text = strFormula
    cboFunctions.Text = rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).DisplayText
End If
//C#
//Получаем значение поля Formula
{
string strFormula = rgrid.CurrentWorksheet.Cells[rgrid.CurrentWorksheet.FocusPos].Formula;

//Если поле не пустое - заносим его значение в строку формул, в поле списка функций заносим основные данные из ячейки
if (strFormula.Length >= 0)
{
txtFormula.Text = strFormula;
cboFunctions.Text = rgrid.CurrentWorksheet.Cells[rgrid.CurrentWorksheet.FocusPos].DisplayText;
}
}

Раздел “Файл” – функции, обычно доступные в меню “Файл”

Новый документ. Очистка листа или книги.

Если применить метод Reset к книге, то из неё удаляются все листы, после чего создаётся один пустой. Если же применить метод к листу – лист просто очистится от данных.

'VB
rgrid.Reset()
rgrid.CurrentWorksheet.Reset()
//C#
rgrid.Reset();
rgrid.CurrentWorksheet.Reset();

Загрузка данных

Загрузка данных выполняется при помощи перегруженной функции Load (для всей книги) или по одному листу с использованием функций LoadCSV, LoadRGF, которые вполне могут исчезнуть в следующих версиях.

Первым её параметром может быть имя файла или файловый поток ввода-вывода

Второй параметр – формат открываемого файла из перечисления IO.FileFormat (CSV, Excel2007, ReoGridFormat, _Auto – автовыбор, _Custom – ещё не реализован)

Третий и необязательный параметр – кодировка символов. Его использование требует импортировать пространство имён System.Text

'VB
'Загрузка данных из файла формата ReoGridFormat с использованием файлового потока
Using ss As FileStream = New FileStream(Application.StartupPath & "\test.rgf", FileMode.Create, FileAccess.Read)
    rgrid.Load(ss, IO.FileFormat.ReoGridFormat, Encoding.UTF8)
End Using

'Загрузка данных из файлов поддерживаемых форматов
'Вариант с функцией Load (книга целиком)
rgrid.Load(Application.StartupPath & "\test.csv", IO.FileFormat.CSV, Encoding.UTF8) 'CSV
rgrid.Load(Application.StartupPath & "\test.rgf", IO.FileFormat.ReoGridFormat, Encoding.UTF8) 'ReoGridFormat
rgrid.Load(Application.StartupPath & "\test.xlsx", IO.FileFormat.Excel2007, Encoding.UTF8) 'Excel 2007/2010

'Вариант с функцией LoadCSV (только один лист)
rgrid.CurrentWorksheet.LoadCSV(Application.StartupPath & "\test.csv", Encoding.UTF8)
//C#
//Загрузка данных из файла формата ReoGridFormat с использованием файлового потока
using (FileStream ss = new FileStream(Application.StartupPath + "\\test.rgf", FileMode.Create, FileAccess.Read)) {
  rgrid.Load(ss, unvell.ReoGrid.IO.FileFormat.ReoGridFormat, Encoding.UTF8);
}	

//Загрузка данных из файлов поддерживаемых форматов
//Вариант с функцией Load (книга целиком)
rgrid.Load(Application.StartupPath + "\\test.csv", unvell.ReoGrid.IO.FileFormat.CSV, Encoding.UTF8);//CSV
rgrid.Load(Application.StartupPath + "\\test.rgf", unvell.ReoGrid.IO.FileFormat.ReoGridFormat, Encoding.UTF8);//ReoGridFormat
rgrid.Load(Application.StartupPath + "\\test.xlsx", unvell.ReoGrid.IO.FileFormat.Excel2007, Encoding.UTF8);//Excel 2007/2010

//Вариант с функцией LoadCSV (только один лист)
rgrid.CurrentWorksheet.LoadCSV(Application.StartupPath + "\\test.csv", Encoding.UTF8);

Сохранение данных

Сохранение данных выполняется при помощи перегруженной функции Save. Её параметры аналогичны функции Load

Первым её параметром может быть имя файла или файловый поток ввода-вывода

Второй параметр – формат открываемого файла из перечисления IO.FileFormat (CSV, Excel2007, ReoGridFormat, _Auto – автовыбор, _Custom – ещё не реализован)

Третий и необязательный параметр – кодировка символов. Его использование требует импортировать пространство имён System.Text

Экспорт в формат HTML выполняется только через файловый поток и только для одного листа. Возможны два варианта: с заголовком (title) по умолчанию или же с произвольным заголовком

'VB
'Сохранение данных в файл формата ReoGridFormat с использованием файлового потока
Using ss As FileStream = New FileStream(Application.StartupPath & "\test.rgf", FileMode.Create, FileAccess.Write)
    rgrid.Save(ss, IO.FileFormat.ReoGridFormat, Encoding.UTF8)
End Using

'Сохранение с использованием методов
rgrid.CurrentWorksheet.ExportAsCSV(Application.StartupPath & "\test.csv", , Encoding.UTF8) 'CSV
rgrid.Save(Application.StartupPath & "\test.rgf", IO.FileFormat.ReoGridFormat, Encoding.UTF8) 'ReoGridFormat
rgrid.Save(Application.StartupPath & "\test.xlsx", IO.FileFormat.Excel2007, Encoding.UTF8) 'Excel 2007/2010

'HTML
Using ss As FileStream = New FileStream(Application.StartupPath & "\test.html", FileMode.Create, FileAccess.Write)
    rgrid.CurrentWorksheet.ExportAsHTML(ss) 'Заголовок по умолчанию
    rgrid.CurrentWorksheet.ExportAsHTML(ss, "Произвольный заголовок") 'Произвольный заголовок
End Using
//C#
//Сохранение данных в файл формата ReoGridFormat с использованием файлового потока
using (FileStream ss = new FileStream(Application.StartupPath + "\\test.rgf", FileMode.Create, FileAccess.Write)) {
rgrid.Save(ss, unvell.ReoGrid.IO.FileFormat.ReoGridFormat, Encoding.UTF8);
}	

//Сохранение с использованием методов
rgrid.CurrentWorksheet.ExportAsCSV(Application.StartupPath + "\\test.csv", string.Empty, Encoding.UTF8); //CSV
rgrid.Save(Application.StartupPath + "\\test.rgf", unvell.ReoGrid.IO.FileFormat.ReoGridFormat, Encoding.UTF8); //ReoGridFormat
rgrid.Save(Application.StartupPath + "\\test.xlsx", unvell.ReoGrid.IO.FileFormat.Excel2007, Encoding.UTF8); //Excel 2007/2010

//HTML
using (FileStream ss = new FileStream(Application.StartupPath + "\\test.html", FileMode.Create, FileAccess.Write)) {
  rgrid.CurrentWorksheet.ExportAsHTML(ss); //Заголовок по умолчанию
  rgrid.CurrentWorksheet.ExportAsHTML(ss, "Произвольный заголовок"); //Произвольный заголовок
}

Разбивка на страницы и печать (Paging and Printing)

Авторазбивка на страницы (Auto Paging)

При выводе таблицы на печать, её содержимое автоматически разделяется между страницами.

reogrid_autopaging_108

Как и в Excel, Reogrid определяет, сколько ячеек можно разместить на каждой странице. Если все ячейки не помещаются на данной странице, то остаток переносится на следующую страницу.

reogrid_autopaging_109

Отображение линий разрывов страниц на экране

reogrid_autopaging_120

Автопрверка диапазона печати

Если диапазон печати неопределён, то ReoGrid попытается найти максимум ячеек, заполненных данными и установит диапазон печати автоматически.

reogrid_autopaging_121

Изменение диапазона печати

Для изменения диапазона печати листа используется свойство PrintableRange

reogrid_autopaging_122

Если размер диапазона печати превышает размер страницы, то он будет разбит автоматически. Ячейки за пределами диапазона печати не будут распечатаны.

Изменение порядка следования страниц

reogrid_autopaging_1121

Изменение параметров страницы

Для этого используется свойство PageSettings

Теперь максимум данных из ячейки ‘A’ могут быть распечатаны в альбомной ориентации бумаги

reogrid_autopaging_123

Вставка разрывов страниц

Для их вставки предназначены свойства RowPageBreaks и ColumnPageBreaks.

Обновление разбивки страницы выполняется уже знакомым методом AutoSplitPage.

Пример того, как таблица разбивается на две страницы:

reogrid_autopaging_124

Системные и пользовательские разрывы страниц

Существует два вида разрывов страниц: обозначаемые пунктирной линией системные, получаемые при помощи метода AutoSplitPage, а также обозначаемые сплошной линиейпользовательские, вставляемые или перетаскиваемые мышью пользователем вручную.

reogrid_autopaging_125

Изменение разрывов страниц

Для изменения/перемещения индексов системных разрывов страниц используются следующие методы ChangeColumnPageBreak и ChangeRowPageBreak

После изменения системных индексов на пользовательские, пунктирная линия сменится сплошной.

Повторения страниц (Iterate pages)

Для повторения всех печатаемых страниц используется метод IteratePrintPage, возвращающий диапазон печати для каждой страницы.

Пример результата вывода на принтер (см. пример ниже):

Диапазон печати: A1:E11
Диапазон печати: F1:K11

По-возможности, повторение страниц (iterate pages) определяется порядком (C#):

rgrid.CurrentWorksheet.IteratePrintPages(PrintPageOrder.OverThenDown, range => { ... });
Если порядок следования страниц не будет указан, то будет использоваться порядок печати.

Отключение возможности изменения/подстройки разрывов страниц пользователем

Для этого используется параметр настройки WorksheetSettings.Behavior_AllowUserChangingPageBreaks

Основные действия показаны в следующих блоках кода:

'VB
'Авторазбивка на страницы
rgrid.CurrentWorksheet.AutoSplitPage()

'Отображение линий разрывов страниц на экране
rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks)

'Изменение диапазона печати    
rgrid.CurrentWorksheet.PrintableRange = New ReoGridRange(1, 1, 9, 9)

'Изменение порядка следования страниц
rgrid.CurrentWorksheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver

'Изменение параметров страницы
'Для этого используется свойство PageSettings
'rgrid.CurrentWorksheet.PageSettings.Landscape = True
'rgrid.CurrentWorksheet.PrintSettings.Landscape = True

'Вставка разрывов страниц
'rgrid.CurrentWorksheet.RowPageBreaks.Add(5)
'rgrid.CurrentWorksheet.ColumnPageBreaks.Add(5)

'Обновление разбивки страницы
rgrid.CurrentWorksheet.AutoSplitPage()

'Изменение разрывов страниц
rgrid.CurrentWorksheet.ChangeColumnPageBreak(0, 1) 'Старый индекс, Новый индекс
rgrid.CurrentWorksheet.ChangeRowPageBreak(0, 1) ' Старый индекс, Новый индекс

'Повторения страниц (Iterate pages)
rgrid.CurrentWorksheet.IteratePrintPages(Function(range)
     Console.WriteLine("Диапазон печати: " + range.ToAddress())
     Return True
 End Function)

'Отключение возможности изменения/подстройки разрывов страниц пользователем
rgrid.CurrentWorksheet.DisableSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks)
//C#
//Авторазбивка на страницы
rgrid.CurrentWorksheet.AutoSplitPage();

//Отображение линий разрывов страниц на экране
rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks);

//Изменение диапазона печати    
rgrid.CurrentWorksheet.PrintableRange = new ReoGridRange(1, 1, 9, 9);

//Изменение порядка следования страниц
rgrid.CurrentWorksheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver;

//Изменение параметров страницы
//Для этого используется свойство PageSettings
//rgrid.CurrentWorksheet.PageSettings.Landscape = true;
//rgrid.CurrentWorksheet.PrintSettings.Landscape = true;

//Вставка разрывов страниц
//rgrid.CurrentWorksheet.RowPageBreaks.Add(5);
//rgrid.CurrentWorksheet.ColumnPageBreaks.Add(5);

//Обновление разбивки страницы
rgrid.CurrentWorksheet.AutoSplitPage();

//Изменение разрывов страниц
rgrid.CurrentWorksheet.ChangeColumnPageBreak(0, 1);//Старый индекс, Новый индекс
rgrid.CurrentWorksheet.ChangeRowPageBreak(0, 1);//Старый индекс, Новый индекс

//Повторения страниц (Iterate pages)
rgrid.CurrentWorksheet.IteratePrintPages(range =>
{
    Console.WriteLine("Диапазон печати: " + range.ToAddress());
    return true;
});

//Отключение возможности изменения/подстройки разрывов страниц пользователем
rgrid.CurrentWorksheet.DisableSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks);

Сессии печати (Print Session) и предварительный просмотр

Представляют собой сессии для вывода на печать определённых листов или целой книги.

reogrid_autopaging_263

'VB
'Вывод на печать содержимого одного листа с настройками по умолчанию
Dim session = rgrid.CurrentWorksheet.CreatePrintSession()
session.Print()

'Вывод на печать содержимого книги (всех листов). Доступно только в Pro-издании
Dim session1 = rgrid.CreatePrintSession()
session1.Print()

'Вывод на печать определённых листов. Доступно только в Pro-издании
Dim session2 = rgrid.CreatePrintSession()
session2.Worksheets.Clear()
session2.Worksheets.Add(rgrid.Worksheets("Sheet1"))
session2.Worksheets.Add(rgrid.Worksheets("Sheet3"))
session2.Print()

'Предварительный просмотр (Print Preview). Отображение диалогового окна
Dim sheet = rgrid.CurrentWorksheet
Using session3 = sheet.CreatePrintSession()
    Using ppd As New PrintPreviewDialog()
ppd.Document = session3.PrintDocument
ppd.SetBounds(200, 200, 1024, 768)
ppd.PrintPreviewControl.Zoom = 1.0
ppd.ShowDialog(Me)
    End Using
End Using
//C#
//Вывод на печать содержимого одного листа с настройками по умолчанию
var session = rgrid.CurrentWorksheet.CreatePrintSession();
session.Print();

//Вывод на печать содержимого книги (всех листов). Доступно только в Pro-издании
var session1 = rgrid.CreatePrintSession();
session1.Print();

//Вывод на печать определённых листов. Доступно только в Pro-издании
var session2 = rgrid.CreatePrintSession();
session2.Worksheets.Clear();
session2.Worksheets.Add(rgrid.Worksheets["Sheet1"]);
session2.Worksheets.Add(rgrid.Worksheets["Sheet3"]);
session2.Print();
    
//Предварительный просмотр (Print Preview). Отображение диалогового окна
var sheet = rgrid.CurrentWorksheet;

using (var session3 = sheet.CreatePrintSession())
{
  using (PrintPreviewDialog ppd = new PrintPreviewDialog())
  {
    ppd.Document = session3.PrintDocument;
    ppd.SetBounds(200, 200, 1024, 768);
    ppd.PrintPreviewControl.Zoom = 1d;
    ppd.ShowDialog(this);
  }
}

Отображение системного диалогового окна настройки параметров страницы

  1. Создаём экземпляр диалогового окна
  2. Импортируем настройки из параметров листа
  3. Настраиваем параметры
  4. Как только пользователь выбрал нужные настройки и нажал экранную кнопку “ОК”, импортируем настройки обратно в параметры листа Reogrid
'VB
Using psd As PageSetupDialog = New PageSetupDialog()
   psd.PageSettings = rgrid.CurrentWorksheet.PrintSettings.CreateSystemPageSettings()

   psd.AllowMargins = True
   psd.AllowPrinter = True
   psd.AllowPaper = True
   psd.EnableMetric = True

   If psd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
      rgrid.CurrentWorksheet.PrintSettings.ApplySystemPageSettings(psd.PageSettings)
   End If
End Using
//C#
using (PageSetupDialog psd = new PageSetupDialog())
{
  // transform ReoGrid page settings to System page settings
    psd.PageSettings = rgrid.CurrentWorksheet.PrintSettings.CreateSystemPageSettings();

  psd.AllowMargins = true;
  psd.AllowPrinter = true;
  psd.AllowPaper = true;
  psd.EnableMetric = true;

  if (psd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  {
    // transform System page settings to ReoGrid page settings
      rgrid.CurrentWorksheet.PrintSettings.ApplySystemPageSettings(psd.PageSettings);
  }
}

Вариант вызова диалога предварительного просмотра

'VB
'Создаём документ для печати
Dim docp As System.Drawing.Printing.PrintDocument = Nothing

'Показываем диалоговое окно предварительного просмотра
Using ppd As PrintPreviewDialog = New PrintPreviewDialog()
   ppd.Document = docp
   ppd.SetBounds(200, 200, 1024, 768)
   ppd.PrintPreviewControl.Zoom = 0.5D '1D
   ppd.PrintPreviewControl.Columns = 2
   ppd.PrintPreviewControl.Rows = 2
   ppd.ShowDialog(Me)
End Using
//C#
//Создаём документ для печати
System.Drawing.Printing.PrintDocument docp = null;//rgrid.CurrentWorksheet.CreatePrintSession();

//Показываем диалоговое окно предварительного просмотра
  using (PrintPreviewDialog ppd = new PrintPreviewDialog()) {
	    ppd.Document = docp;
	    ppd.SetBounds(200, 200, 1024, 768);
	    ppd.PrintPreviewControl.Zoom = 0.5D;//1D
	    ppd.PrintPreviewControl.Columns = 2;
	    ppd.PrintPreviewControl.Rows = 2;
	    ppd.ShowDialog(this);
  }

Вывод содержимого листа на печать с использованием стандартного диалогового окна печати

'VB
Dim doc As System.Drawing.Printing.PrintDocument = Nothing
Try
    doc = rgrid.CurrentWorksheet.CreatePrintSession().PrintDocument

Catch ex As Exception
    MessageBox.Show(this, ex.Message, this.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information)
    Return
End Try

Using pd = New System.Windows.Forms.PrintDialog()
    pd.Document = doc
    pd.UseEXDialog = True 'в 64-битной Windows

    If pd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
doc.PrinterSettings = pd.PrinterSettings
doc.Print()
    End If
End Using

If doc <> Nothing Then doc.Dispose()
//C#
System.Drawing.Printing.PrintDocument doc = null;

try {
  doc = rgrid.CurrentWorksheet.CreatePrintSession().PrintDocument;
}
catch (Exception ex)
{
  MessageBox.Show(this, ex.Message, this.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
  return;
}

using (var pd = new System.Windows.Forms.PrintDialog())
{
  pd.Document = doc;
  pd.UseEXDialog = true;  // в 64-битной Windows

  if (pd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  {
    doc.PrinterSettings = pd.PrinterSettings;
    doc.Print();
  }
}

if (doc != null) doc.Dispose();

Раздел “Правка” – функции, обычно доступные в меню “Правка”

Отмена последнего действия, возврат отменённого действия и повтор последнего. Выполняются только если это возможно

'VB
If rgrid.CanUndo = True Then rgrid.Undo()
If rgrid.CanRedo = True Then rgrid.Redo()
rgrid.RepeatLastAction(rgrid.CurrentWorksheet.SelectionRange)
//C#
if (rgrid.CanUndo() == true) rgrid.Undo();
if (rgrid.CanRedo() == true) rgrid.Redo();
rgrid.RepeatLastAction(rgrid.CurrentWorksheet.SelectionRange);

Буфер обмена (Clipboard)

Небольшое отступление. О реализации работы с буфером обмена.

При копировании содержимого нескольких ячеек, например, девяти, в буфер обмена заносится текст в следующем формате: ячейки одной строки разделяются символом табуляции, строки разделяются символом перевода строки:

A1 \t B1 \t C1 \n
A2 \t B2 \t C2 \n
A3 \t B3 \t C3 \n

Примечание. Для перехвата системных горячих клавиш введены события с префиксом Before: BeforeCut, BeforeCopy, BeforePaste. Также могут понадобиться события с префиксом After: AfterCut, AfterCopy, AfterPaste

Для выделения всех ячеек используется метод SelectAll

'VB
'Вырезать (Cut), Копировать (Copy). Проверяем возможность и выполняем процедуру
If rgrid.CurrentWorksheet.CanCut = True Then rgrid.CurrentWorksheet.Cut()
If rgrid.CurrentWorksheet.CanCopy = True Then rgrid.CurrentWorksheet.Copy()
If rgrid.CurrentWorksheet.CanPaste = True Then rgrid.CurrentWorksheet.Paste()

'Если нужно контролировать процесс получения данных из буфера обмена
'Создание переменной и получение данных
'Преобразование в массив типа Объект
'Перенос данных в таблицу
Dim text As String = Clipboard.GetText()
Dim data(,) As Object = RGUtility.ParseTabbedString(text)
rgrid.CurrentWorksheet.SetRangeData(rgrid.CurrentWorksheet.SelectionRange, data)

'Выделить все
rgrid.CurrentWorksheet.SelectAll()
//C#
//Вырезать (Cut), Копировать (Copy). Проверяем возможность и выполняем процедуру
if (rgrid.CurrentWorksheet.CanCut() == true) rgrid.CurrentWorksheet.Cut();
if (rgrid.CurrentWorksheet.CanCopy() == true) rgrid.CurrentWorksheet.Copy();
if (rgrid.CurrentWorksheet.CanPaste() == true) rgrid.CurrentWorksheet.Paste();

//Если нужно контролировать процесс получения данных из буфера обмена
//Создание переменной и получение данных
//Преобразование в массив типа Объект
//Перенос данных в таблицу
string text = Clipboard.GetText();
object[,] data = RGUtility.ParseTabbedString(text);
rgrid.CurrentWorksheet.SetRangeData(rgrid.CurrentWorksheet.SelectionRange, data);

//Выделить все
rgrid.CurrentWorksheet.SelectAll();

Для событий BeforeCut, BeforeCopy, BeforePaste можно выполнить перехват горячих клавиш и не допустить выполнение функции. Для этого в обработчик события достаточно добавить строку e.IsCancelled = True (VB), e.IsCancelled == true (C#).

Раздел “Вид” – функции, обычно доступные в меню “Вид” (View)

  1. Стиль выделения (Selection Style). Определяет внешний вид активной ячейки.
  2. Режим выделения (Selection Mode). Определяет активный элемент (по умолчанию – диапазон).
  3. Направление перехода (Direction). Определяет направление перехода фокуса после окончания правки ячейки.

Изменение размеров таблицы (Resize)

На данный момент лист Reogrid максимально может содержать 1048576 строк и 32768 столбцов

'VB
'Стиль выделения
rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.None 'Отсутствует
rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.Default 'По умолчанию
rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.FocusRect 'Фокус Windows

'Режим выделения
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.None 'Отсутствует
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Cell 'Одна ячейка
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Range 'Диапазон ячеек
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Row 'Строка
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Column 'Столбец

'Направление перехода
rgrid.CurrentWorksheet.SelectionForwardDirection = SelectionForwardDirection.Right 'Вправо
rgrid.CurrentWorksheet.SelectionForwardDirection = SelectionForwardDirection.Down 'Вниз
//C#
//Стиль выделения
rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.None;
rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.Default;
rgrid.CurrentWorksheet.SelectionStyle = unvell.ReoGrid.WorksheetSelectionStyle.FocusRect;

//Режим выделения
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.None;
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Cell;
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Range;
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Row;
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Column;

//Направление перехода
rgrid.CurrentWorksheet.SelectionForwardDirection = SelectionForwardDirection.Right;
rgrid.CurrentWorksheet.SelectionForwardDirection = SelectionForwardDirection.Down;

Фиксация ячеек (Freezing)

Если позиция имеет значения 0,0, то на данный момент зафиксированные строки или столбцы отсутствуют

Если зафиксированная область больше максимальной области отображения элемента управления, то активная область станет невидимой

'VB
'Получаем позицию заморозки/закрепления
Dim pos As ReoGridPos = rgrid.CurrentWorksheet.GetFreezePos()

'Проверяем - зафиксирован ли данный лист:
Dim isFrozen As Boolean = rgrid.CurrentWorksheet.IsFrozen()

'Фиксируем до указанной позиции (вводим третий аргумент, указывающий точку фиксации)
rgrid.CurrentWorksheet.FreezeToCell(5, 0) 'Обычная фиксация (указана только позиция)
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Left) 'С привязкой по левому краю
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Right) 'С привязкой по правому краю
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Top) 'С привязкой по верхнему краю
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Bottom) 'С привязкой по нижнему краю
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftTop) 'С привязкой по левому и верхнему краям
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftBottom) 'С привязкой по левому и нижнему краям
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightTop) 'С привязкой по правому и верхнему краям
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightBottom) 'С привязкой по правому и нижнему краям

'Отмена фиксации
rgrid.CurrentWorksheet.Unfreeze()
//C#
//Получаем позицию заморозки/закрепления
ReoGridPos pos = rgrid.CurrentWorksheet.GetFreezePos();

//Проверяем - зафиксирован ли данный лист:
bool isFrozen = rgrid.CurrentWorksheet.IsFrozen();

//Фиксируем до указанной позиции (вводим третий аргумент, указывающий точку фиксации)
rgrid.CurrentWorksheet.FreezeToCell(5, 0);//Обычная фиксация (указана только позиция)
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Left);//С привязкой по левому краю
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Right);//С привязкой по правому краю
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Top);//С привязкой по верхнему краю
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Bottom);//С привязкой по нижнему краю
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftTop);//С привязкой по левому и верхнему краям
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftBottom);//С привязкой по левому и нижнему краям
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightTop);//С привязкой по правому и верхнему краям
rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightBottom);//С привязкой по правому и нижнему краям

//Отмена фиксации
rgrid.CurrentWorksheet.Unfreeze();

Изменение размера

'VB
'Получаем количество строк и столбцов
Dim intRows As Integer = rgrid.CurrentWorksheet.RowCount 'Количество строк
Dim intCols As Integer = rgrid.CurrentWorksheet.ColumnCount 'Количество столбцов

'Задаём размер таблицы используя указанные выше переменные
rgrid.CurrentWorksheet.Resize(intRows, intCols)

'Или максимальное количество ячеек
rgrid.CurrentWorksheet.Resize(1048576, 32768)
//C#
//Получаем количество строк и столбцов
int intRows = rgrid.CurrentWorksheet.RowCount;
int intCols = rgrid.CurrentWorksheet.ColumnCount;

//Задаём размер таблицы используя указанные выше переменные
rgrid.CurrentWorksheet.Resize(intRows, intCols);

//Или максимальное количество ячеек
rgrid.CurrentWorksheet.Resize(1048576, 32768);

Стили

Для определения факта изменения стиля отображения ReoGrid использует перечисление PlainStyleFlag

Сначала необходимо указать флаги изменяемых параметров, а затем уже и присвоить значения

Установка стиля

Метод

Всегда применяем стиль к диапазону, а не к отдельной ячейке.

rgrid.CurrentWorksheet.SetRangeStyles(Диапазон типа ReoGridRange, Стиль типа ReoGridRangeStyle)

Действие

rgrid.CurrentWorksheet.DoAction(new RGSetRangeStyleAction(Диапазон типа ReoGridRange, Стиль типа WorksheetRangeStyle))

В сценарии (Script)

rgrid.CurrentWorksheet.getCell(0, 0).style.backgroundColor = 'red'

Получение значений стилей

Получаем стили диапазона или ячейки:

rgrid.CurrentWorksheet.GetRangeStyle(Диапазон типа ReoGridRange)
rgrid.CurrentWorksheet.GetCellStyle(Позиция_ячейки типа ReoGridPos)

Флаг PlainStyleFlag позволяет указать, какие стили должны быть удалены. В примере показано удаление стиля фона для выбранного диапазона ячеек с помощью метода и действия.

Работа со шрифтом и содержимым ячеек

Шрифт (Font). Гарнитура, кегль, цвет.

Пригодится для события TextChanged списка (ComboBox) cboFontName

'VB
Dim MyStyleFont1 As New WorksheetRangeStyle
MyStyleFont1.Flag = PlainStyleFlag.FontName 'Меняем гарнитуру (семейство, имя)
MyStyleFont1.FontName = cboFontName.Text
MyStyleFont1.Flag = PlainStyleFlag.FontSize 'Меняем кегль (размер). Пригодится для события TextChanged списка cboFontSize
MyStyleFont1.FontSize = Convert.ToInt16(Val(cboFontSize.Text))
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont1)
//C#
WorksheetRangeStyle MyStyleFont1 = new WorksheetRangeStyle();
MyStyleFont1.Flag = PlainStyleFlag.FontName;
MyStyleFont1.FontName = cboFontName.Text;
MyStyleFont1.Flag = PlainStyleFlag.FontSize;
MyStyleFont1.FontSize = int.Parse(cboFontSize.Text);
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont1);
Увеличиваем/уменьшаем кегль (размер) шрифта на 1 пт
'VB
Dim MyStyle As New WorksheetRangeStyle
MyStyle = rgrid.CurrentWorksheet.GetRangeStyles(rgrid.CurrentWorksheet.SelectionRange)

'Изменяем размер (кегль) шрифта
Dim MyStyleFont2 As New WorksheetRangeStyle
MyStyleFont2.Flag = PlainStyleFlag.FontSize
MyStyleFont2.FontSize = MyStyle.FontSize + 1 '+ 1 пт
MyStyleFont2.FontSize = MyStyle.FontSize - 1 '- 1 пт
cboFontSize.Text = Convert.ToString(MyStyleFont2.FontSize)
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont2)
//C#
WorksheetRangeStyle MyStyle = new WorksheetRangeStyle();
MyStyle = rgrid.CurrentWorksheet.GetRangeStyles(rgrid.CurrentWorksheet.SelectionRange);

//Изменяем размер (кегль) шрифта
WorksheetRangeStyle MyStyleFont2 = new WorksheetRangeStyle();
MyStyleFont2.Flag = PlainStyleFlag.FontSize;
MyStyleFont2.FontSize = MyStyle.FontSize + 1;//+ 1 пт
MyStyleFont2.FontSize = MyStyle.FontSize - 1;//- 1 пт
cboFontSize.Text = Convert.ToString(MyStyleFont2.FontSize);
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont2);

Цвет текста (показано три варианта: для красного, синего и чёрного цветов)

'VB
'Изменяем цвет шрифта
Dim MyStyleFont3 As New WorksheetRangeStyle
MyStyleFont3.Flag = PlainStyleFlag.TextColor
MyStyleFont3.TextColor = Color.Red 'Красный
'MyStyleFont3.TextColor = Color.Blue 'Синий
'MyStyleFont3.TextColor = Color.Black 'Чёрный
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont3)
//C#
//Изменяем цвет шрифта на красный
WorksheetRangeStyle MyStyleFont3 = new WorksheetRangeStyle();
MyStyleFont3.Flag = PlainStyleFlag.TextColor;
MyStyleFont3.TextColor = Color.Red; //Красный
//MyStyleFont3.TextColor = Color.Blue; //Синий
//MyStyleFont3.TextColor = Color.Black; //Чёрный
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont3);

Управление начертанием и переносом слов (подразумевается использование кнопки-флажка с двумя положениями)

'VB
Dim MyStyleFont4 As New WorksheetRangeStyle
MyStyleFont4.Flag = PlainStyleFlag.FontStyleBold 'Полужирный
MyStyleFont4.Bold = chkFontBold.Checked

MyStyleFont4.Flag = PlainStyleFlag.FontStyleItalic 'Курсив (наклонный)
MyStyleFont4.Italic = chkFontItalic.Checked

MyStyleFont4.Flag = PlainStyleFlag.FontStyleUnderline 'Подчёркнутый
MyStyleFont4.Underline = chkFontUnderline.Checked

MyStyleFont4.Flag = PlainStyleFlag.FontStyleStrikethrough 'Зачёркнутый
MyStyleFont4.Strikethrough = chkFontStrike.Checked

MyStyleFont4.Flag = PlainStyleFlag.TextWrap 'Перенос текста (по умолчанию - без переноса, - no-wrap)
If chkTextWrap.Checked = True Then MyStyleFont4.TextWrapMode = TextWrapMode.WordBreak Else MyStyleFont4.TextWrapMode = TextWrapMode.NoWrap

rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont4)
//C#
WorksheetRangeStyle MyStyleFont4 = new WorksheetRangeStyle();
MyStyleFont4.Flag = PlainStyleFlag.FontStyleBold; //Полужирный
MyStyleFont4.Bold = chkFontBold.Checked;

MyStyleFont4.Flag = PlainStyleFlag.FontStyleItalic; //Курсив (наклонный)
MyStyleFont4.Italic = chkFontItalic.Checked;

MyStyleFont4.Flag = PlainStyleFlag.FontStyleUnderline; //Подчёркнутый
MyStyleFont4.Underline = chkFontUnderline.Checked;

MyStyleFont4.Flag = PlainStyleFlag.FontStyleStrikethrough; //Зачёркнутый
MyStyleFont4.Strikethrough = chkFontStrike.Checked;

MyStyleFont4.Flag = PlainStyleFlag.TextWrap; //Перенос текста (по умолчанию - без переноса, - no-wrap)
if (chkTextWrap.Checked == true) {
    MyStyleFont4.TextWrapMode = TextWrapMode.WordBreak;}
else
{MyStyleFont4.TextWrapMode = TextWrapMode.NoWrap;}
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont4);

Выравнивание (Align)

Текст может выравниваться как в горизонтальном, так и в вертикальном направлениях

Горизонтальное выравнивание

Для горизонтального выравнивания результат зависит от значения свойства MyStyleFont.HAlign

ReoGridHorAlign.Left – выравнивание по левому краю

ReoGridHorAlign.Center – выравнивание по центру

ReoGridHorAlign.Right – выравнивание по правому краю

ReoGridHorAlign.DistributedIndent – распределённый отступ

'VB
Dim MyStyleFont5 As New WorksheetRangeStyle
MyStyleFont5.Flag = PlainStyleFlag.HorizontalAlign 'Горизонтальное выравнивание по левому краю
MyStyleFont5.HAlign = ReoGridHorAlign.Left 'По левому краю
MyStyleFont5.HAlign = ReoGridHorAlign.Center 'По центру
MyStyleFont5.HAlign = ReoGridHorAlign.Right 'По правому краю
MyStyleFont5.HAlign = ReoGridHorAlign.DistributedIndent 'С распределённым отступом

rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont5)
//C#
WorksheetRangeStyle MyStyleFont5 = new WorksheetRangeStyle();
MyStyleFont5.Flag = PlainStyleFlag.HorizontalAlign;
MyStyleFont5.HAlign = ReoGridHorAlign.Left; //По левому краю
MyStyleFont5.HAlign = ReoGridHorAlign.Center; //По центру
MyStyleFont5.HAlign = ReoGridHorAlign.Right; //По правому краю
MyStyleFont5.HAlign = ReoGridHorAlign.DistributedIndent; //С распределённым отступом
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont5);

Вертикальное выравнивание

Для вертикального выравнивания результат зависит от значения свойства MyStyleFont.VAlign

ReoGridVerAlign.Top – выравнивание по верхней стороне

ReoGridVerAlign.Middle – выравнивание по центру

ReoGridVerAlign.Bottom – выравнивание по нижней стороне

'VB
Dim MyStyleFont6 As New WorksheetRangeStyle
MyStyleFont6.Flag = PlainStyleFlag.VerticalAlign
MyStyleFont6.VAlign = ReoGridVerAlign.Top 'По верхней стороне
MyStyleFont6.VAlign = ReoGridVerAlign.Middle 'Посередине
MyStyleFont6.VAlign = ReoGridVerAlign.Bottom 'По нижней стороне
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont6)
//C#
WorksheetRangeStyle MyStyleFont6 = new WorksheetRangeStyle();
MyStyleFont6.Flag = PlainStyleFlag.VerticalAlign;
MyStyleFont6.VAlign = ReoGridVerAlign.Top; //По верхней стороне

//Меняется только эта строка
MyStyleFont6.VAlign = ReoGridVerAlign.Middle; //Посередине
MyStyleFont6.VAlign = ReoGridVerAlign.Bottom; //По нижней стороне
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont6);		

Объединение и разделение ячеек

Reogrid позволяет объединять и снова разделять ячейки. При этом объединять пересекающиеся диапазоны запрещено: ячейки из одного объединения не должны принадлежать другому. Также предусмотрены возможности проверки текущего состояния произвольной ячейки.

Объединение ячеек

1. Объединяем ячейки, начиная с (2,1). Количество строк – 3, количество столбцов – 4

2. Диапазон объединения начинается в (0,0), содержит 4 строки и 6 столбцов

'VB
'1
rgrid.CurrentWorksheet.MergeRange(New ReoGridRange(2, 1, 3, 4))
'2
'rgrid.CurrentWorksheet.DoAction(New MergeRangeAction(New ReoGridRange(0, 0, 4, 6)))
//C#
//1
rgrid.CurrentWorksheet.MergeRange(new ReoGridRange(2, 1, 3, 4));
//2
//rgrid.CurrentWorksheet.DoAction(new MergeRangeAction(new ReoGridRange(0, 0, 4, 6)))

Разделение ячеек

Исключение RangeIntersectionException

Если попытаться объединить 2 и более ячеек, каждая из которых уже входит в состав своего объединения, то возникнет исключение RangeIntersectionException.

Пользовательский код позволяет отловить это исключение и прервать текущую операцию.

Метод CheckIntersectedMergingRange применяется для проверки принадлежности любой ячейки определённому диапазону. Этот метод помогает избегать указанное выше исключение.

'VB
Dim outputRange As ReoGridRange = rgrid.CurrentWorksheet.CheckIntersectedMergingRange(inputRange)
//C#
ReoGridRange outputRange = rgrid.CurrentWorksheet.CheckIntersectedMergingRange(inputRange);

Если выражение outputRange.IsEmpty является истинным, то диапазон inputRange безопасен. Существует еще один метод, делающий то же самое.

'VB
Dim rs As Boolean = rgrid.CurrentWorksheet.HasIntersectedMergingRange(inputRange)
MsgBox("Слияние ячеек")
//C#
bool rs = rgrid.CurrentWorksheet.HasIntersectedMergingRange(inputRange);
MessageBox.Show("Слияние ячеек");

Нельзя объединять ячейки из разных объединённых диапазонов – это вызовет ошибку.

'VB
rgrid.CurrentWorksheet.Reset()
Try
    'Попытка объединить пересекающиеся диапазоны приведёт к возникновению исключения
    rgrid.CurrentWorksheet.MergeRange(New ReoGridRange(2, 2, 5, 5))
    rgrid.CurrentWorksheet.MergeRange(New ReoGridRange(3, 3, 5, 5))
Catch 'unvell.reogrid.RangeIntersectionException
    MessageBox.Show("Обнаружено исключение RangeIntersectionException! Невозможно изменить часть диапазона ячеек.")
End Try
//C#
       rgrid.CurrentWorksheet.Reset();
try {
//Попытка объединить пересекающиеся диапазоны приведёт к возникновению исключения
rgrid.CurrentWorksheet.MergeRange(new ReoGridRange(2, 2, 5, 5));
rgrid.CurrentWorksheet.MergeRange(new ReoGridRange(3, 3, 5, 5));
//unvell.reogrid.RangeIntersectionException
} catch {
MessageBox.Show("Обнаружено исключение RangeIntersectionException! Невозможно изменить часть диапазона ячеек.");
}

Проверки и получение значений

Используются следующие методы и свойства:

  • IsMergedCell – метод для проверки факта объединения ячеек;
  • GetRowspan – свойство ячейки для определения количества строк в объединении (number of rowspan);
  • GetColspan – свойство ячейки для определения количества столбцов в объединении (number of colspan);
  • GetMergedCellOfRange – метод для поиска объединенной ячейки в определенном диапазоне.
  • CheckMergedRange – метод для определения всей ячейки, если известна её часть.
  • IsValidCell – метод проверки ячеек на действительность. Недействительными ячейками являются ячейки, объединённые с другими. Недействительной ячейке нельзя задать данные или стили.

Примеры использования.

Ячейка в позиции 2:1 является объединённой, она содержит 4 строки (rowspan=4) и 3 столбца (colspan=3).

'VB
Dim isMergedCell As Boolean = rgrid.CurrentWorksheet.IsMergedCell(2, 1)
Dim isMergedCell_1 As Boolean = rgrid.CurrentWorksheet.Cells(1, 2).IsMergedCell
Dim rowspan As Integer = rgrid.CurrentWorksheet.Cells(1, 2).GetRowspan()
Dim colspan As Integer = rgrid.CurrentWorksheet.Cells(1, 2).GetColspan()
'Dim output As ReoGridCell = rgrid.CurrentWorksheet.GetMergedCellOfRange(Input)
'Dim outputRange As ReoGridRange = rgrid.CurrentWorksheet.CheckMergedRange(inputRange)
rgrid.CurrentWorksheet.IsValidCell(2, 2) ' true
rgrid.CurrentWorksheet.IsValidCell(2, 3) ' false
//C#
bool isMergedCell = rgrid.CurrentWorksheet.IsMergedCell(2, 1);
bool isMergedCell_1 = rgrid.CurrentWorksheet.Cells[1, 2].IsMergedCell;
int rowspan = rgrid.CurrentWorksheet.Cells[1, 2].GetRowspan();
int colspan = rgrid.CurrentWorksheet.Cells[1, 2].GetColspan();
//ReoGridCell output = rgrid.CurrentWorksheet.GetMergedCellOfRange(Input());
//ReoGridRange outputRange = rgrid.CurrentWorksheet.CheckMergedRange(inputRange);
rgrid.CurrentWorksheet.IsValidCell(2, 2); //true
rgrid.CurrentWorksheet.IsValidCell(2, 3); //false

Объединение ячеек и группировка

Немного об особенностях объединения ячеек. Так как Reogrid обычно работает с выделенными диапазонами ячеек, то нужно предусматривать проверку: выбрана одна ячейка или более одной.

1. Объединение ячеек

'VB
If rgrid.CurrentWorksheet.SelectionRange.Rows = 1 And rgrid.CurrentWorksheet.SelectionRange.Cols = 1 Then
    MessageBox.Show("Выбранный диапазон должен состоять хотя бы из двух ячеек.")
Else
    Try
rgrid.CurrentWorksheet.MergeRange(rgrid.CurrentWorksheet.SelectionRange)
    Catch 'RangeIntersectionException
MessageBox.Show("Невозможно объединить пересекающиеся диапазоны.")
    End Try
End If
//C#
if (rgrid.CurrentWorksheet.SelectionRange.Rows == 1 & rgrid.CurrentWorksheet.SelectionRange.Cols == 1) {
MessageBox.Show("Выбранный диапазон должен состоять хотя бы из двух ячеек.");
} else {
try {
rgrid.CurrentWorksheet.MergeRange(rgrid.CurrentWorksheet.SelectionRange);
//RangeIntersectionException
} catch {
MessageBox.Show("Невозможно объединить пересекающиеся диапазоны.");
}
}		

3. Разбиение (разделение) ячеек

'VB
rgrid.CurrentWorksheet.UnmergeRange(New ReoGridRange(0, 0, 10, 10)) 'Указанный диапазон
rgrid.CurrentWorksheet.UnmergeRange(rgrid.CurrentWorksheet.SelectionRange) 'Выделенный диапазон
//C#
rgrid.CurrentWorksheet.UnmergeRange(new ReoGridRange(0, 0, 10, 10)); //Указанный диапазон
rgrid.CurrentWorksheet.UnmergeRange(rgrid.CurrentWorksheet.SelectionRange);//Выделенный диапазон

Примечание. Метод UnmergeRange находит и разбивает все объединённые ячейки указанного диапазона.

4. Группировка (тип данных – Integer)

'VB
rgrid.CurrentWorksheet.GroupRows(1, 3) 'Группировка строк: со строки 1, их количество - 3
rgrid.CurrentWorksheet.GroupColumns(1, 3) 'Группировка столбцов: со столбца 1, их количество - 3
rgrid.CurrentWorksheet.UngroupRows(1, 3) 'Разгруппировка строк: со строки 1, их количество - 3
rgrid.CurrentWorksheet.UngroupColumns(1, 3) 'Разгруппировка столбцов: со столбца 1, их количество - 3
//C#
rgrid.CurrentWorksheet.GroupRows(1, 3); //Группировка строк: со строки 1, их количество - 3
rgrid.CurrentWorksheet.GroupColumns(1, 3);//Группировка столбцов: со столбца 1, их количество - 3
rgrid.CurrentWorksheet.UngroupRows(1, 3);//Разгруппировка строк: со строки 1, их количество - 3
rgrid.CurrentWorksheet.UngroupColumns(1, 3);//Разгруппировка столбцов: со столбца 1, их количество - 3

Границы (Borders) и фон ячеек

Тип линии задаётся перечислением BorderLineStyle и может принимать значения, показанные в приведённом ниже примере.

Цвет линии задаётся перечислением Color или другим предусмотреным в .Net способом.

Тип границы задаётся перечислением BorderPositions и может принимать значения, показанные в приведённом ниже примере.

'VB
'Объявление экземпляра стиля диапазона ячеек
Dim MyStyleBorder1 As New RangeBorderStyle

'Тип линий
MyStyleBorder1.Style = BorderLineStyle.BoldDashDot 'Полужирный штрих-точка
MyStyleBorder1.Style = BorderLineStyle.BoldDashDotDot 'Полужирный штрих-точка-точка
MyStyleBorder1.Style = BorderLineStyle.BoldDashed 'Полужирный штрих
MyStyleBorder1.Style = BorderLineStyle.BoldDotted 'Полужирная точка
MyStyleBorder1.Style = BorderLineStyle.BoldSolid 'Полужирная сплошная
MyStyleBorder1.Style = BorderLineStyle.BoldSolidStrong 'Полужирная сплошная
MyStyleBorder1.Style = BorderLineStyle.DashDot 'Штрих-точка
MyStyleBorder1.Style = BorderLineStyle.DashDotDot 'Штрих-точка-точка
MyStyleBorder1.Style = BorderLineStyle.Dashed 'Штриховая
MyStyleBorder1.Style = BorderLineStyle.Dashed2 'Штриховая
MyStyleBorder1.Style = BorderLineStyle.Dotted 'Точечная
MyStyleBorder1.Style = BorderLineStyle.DoubleLine 'Двойная линия
MyStyleBorder1.Style = BorderLineStyle.None 'Без границы
MyStyleBorder1.Style = BorderLineStyle.Solid 'Сплошная

'Цвета линий
MyStyleBorder1.Color = Color.Green 'Цвет из палитры .Net
MyStyleBorder1.Color = unvell.ReoGrid.Graphics.SolidColor.Green 'Цвет из палитры Unvell.Reogrid
MyStyleBorder1.Color = Color.FromArgb(127, 127, 127, 127) 'Произвольный цвет с прозрачностью

'Параметры границ диапазона или ячейки
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All, MyStyleBorder1) 'Все границы
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Backslash, MyStyleBorder1) 'Диагональная 1
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Bottom, MyStyleBorder1) 'Нижняя
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideAll, MyStyleBorder1) 'Все внутренние
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideHorizontal, MyStyleBorder1) 'Внутренние горизонтальные
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideVertical, MyStyleBorder1) 'Внутренние вертикальные
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Left, MyStyleBorder1) 'Левая
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.LeftRight, MyStyleBorder1) 'Левая и правая
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.None, MyStyleBorder1) 'Отсутсвуют
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Outside, MyStyleBorder1) 'Внешние (ранее использовалось уже устаревшее Outline)
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Right, MyStyleBorder1) 'Правая
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Slash, MyStyleBorder1) 'Диагональная 2
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Top, MyStyleBorder1) 'Верхняя
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.TopBottom, MyStyleBorder1) 'Верхняя и нижняя
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.X, MyStyleBorder1) 'Все диагональные
//C#
//Объявление экземпляра стиля диапазона ячеек
RangeBorderStyle MyStyleBorder1 = new RangeBorderStyle();

//Тип линий
MyStyleBorder1.Style = BorderLineStyle.BoldDashDot; //Полужирный штрих-точка
MyStyleBorder1.Style = BorderLineStyle.BoldDashDotDot; //Полужирный штрих-точка-точка
MyStyleBorder1.Style = BorderLineStyle.BoldDashed; //Полужирный штрих
MyStyleBorder1.Style = BorderLineStyle.BoldDotted; //Полужирная точка
MyStyleBorder1.Style = BorderLineStyle.BoldSolid; //Полужирная сплошная
MyStyleBorder1.Style = BorderLineStyle.BoldSolidStrong; //Полужирная сплошная
MyStyleBorder1.Style = BorderLineStyle.DashDot; //Штрих-точка
MyStyleBorder1.Style = BorderLineStyle.DashDotDot; //Штрих-точка-точка
MyStyleBorder1.Style = BorderLineStyle.Dashed; //Штриховая
MyStyleBorder1.Style = BorderLineStyle.Dashed2; //Штриховая
MyStyleBorder1.Style = BorderLineStyle.Dotted; //Точечная
MyStyleBorder1.Style = BorderLineStyle.DoubleLine; //Двойная линия
MyStyleBorder1.Style = BorderLineStyle.None; //Без границы
MyStyleBorder1.Style = BorderLineStyle.Solid; //Сплошная

//Цвета линий
MyStyleBorder1.Color = Color.Green; //Цвет из палитры .Net
MyStyleBorder1.Color = unvell.ReoGrid.Graphics.SolidColor.Green; //Цвет из палитры Unvell.Reogrid
MyStyleBorder1.Color = Color.FromArgb(127, 127, 127, 127); //Произвольный цвет с прозрачностью

//Параметры границ диапазона или ячейки
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All, MyStyleBorder1); //Все границы
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Backslash, MyStyleBorder1); //Диагональная 1
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Bottom, MyStyleBorder1); //Нижняя
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideAll, MyStyleBorder1); //Все внутренние
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideHorizontal, MyStyleBorder1); //Внутренние горизонтальные
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.InsideVertical, MyStyleBorder1); //Внутренние вертикальные
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Left, MyStyleBorder1); //Левая
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.LeftRight, MyStyleBorder1); //Левая и правая
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.None, MyStyleBorder1); //Отсутсвуют
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Outside, MyStyleBorder1); //Внешние (ранее использовалось уже устаревшее Outline)
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Right, MyStyleBorder1); //Правая
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Slash, MyStyleBorder1); //Диагональная 2
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.Top, MyStyleBorder1); //Верхняя
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.TopBottom, MyStyleBorder1); //Верхняя и нижняя
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.X, MyStyleBorder1); //Все диагональные

4. Очистка границ (Clear)

Для очистки границ достаточно задать для них пустой цвет (Color.Empty) или применить функцию

'VB
Dim MyStyleBorder2 As New RangeBorderStyle
MyStyleBorder2.Color = Color.Empty
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All, MyStyleBorder2)
'или
rgrid.CurrentWorksheet.RemoveRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All)
//C#
RangeBorderStyle MyStyleBorder2 = new RangeBorderStyle();
MyStyleBorder2.Color = Color.Empty;
rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All, MyStyleBorder2);
//или
rgrid.CurrentWorksheet.RemoveRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All);

5. Заливка фона

Фон ячейки может быть как залит определённым цветом, так и текстурой (по шаблону). Ниже приведены примеры настройки границ и заливки фона

'VB
Dim MyStyle1 As New WorksheetRangeStyle
MyStyle1.Flag = PlainStyleFlag.BackColor
MyStyle1.BackColor = Color.Empty 'Очищаем ячейки
MyStyle1.BackColor = unvell.ReoGrid.Graphics.SolidColor.Yellow 'Жёлтый цвет
MyStyle1.BackColor = unvell.ReoGrid.Graphics.SolidColor.Red 'Красный цвет
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyle1)

'Фон на основе шаблона
Dim MyStylePattern As New WorksheetRangeStyle
MyStylePattern.Flag = PlainStyleFlag.FillPattern
MyStylePattern.Flag = PlainStyleFlag.BackColor
MyStylePattern.BackColor = Color.LightYellow
MyStylePattern.FillPatternColor = Color.SkyBlue
MyStylePattern.FillPatternStyle = unvell.ReoGrid.Graphics.RGHatchStyle.DiagonalBrick
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStylePattern)
//C#
WorksheetRangeStyle MyStyle1 = new WorksheetRangeStyle();
MyStyle1.Flag = PlainStyleFlag.BackColor;
MyStyle1.BackColor = Color.Empty;//Очищаем ячейки
MyStyle1.BackColor = Color.Red;//Красный цвет
MyStyle1.BackColor = unvell.ReoGrid.Graphics.SolidColor.Yellow;//Жёлтый цвет
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStyle1);

//Фон на основе шаблона
WorksheetRangeStyle MyStylePattern = new WorksheetRangeStyle();
MyStylePattern.Flag = PlainStyleFlag.FillPattern;
MyStylePattern.Flag = PlainStyleFlag.BackColor;
MyStylePattern.BackColor = Color.LightYellow;
MyStylePattern.FillPatternColor = Color.SkyBlue;
MyStylePattern.FillPatternStyle = unvell.ReoGrid.Graphics.RGHatchStyle.DiagonalBrick;
rgrid.CurrentWorksheet.SetRangeStyles(rgrid.CurrentWorksheet.SelectionRange, MyStylePattern);

Масштабирование (Zoom in/out)

Масштабирование может производиться как с помощью вращения колёсика мыши при зажатой клавише CTRL, так и программно

Ниже показаны примеры работы с масштабированием:

  1. Выбор значения масштаба из списка (событие TextChanged для раскрывающегося списка cboZoom, содержащего пункты вроде “10 %”).
  2. Увеличение масштаба на 10%.
  3. Уменьшение масштаба на 10%.
  4. Сброс масштаба к значению 100%.
  5. Установка единицы масштаба.
'VB
rgrid.CurrentWorksheet.ScaleFactor = Convert.ToSingle(Val(cboZoom.Text.Replace("%", String.Empty).Trim)) / 100.0F
rgrid.CurrentWorksheet.ZoomIn()
rgrid.CurrentWorksheet.ZoomOut()
rgrid.CurrentWorksheet.ZoomReset()
rgrid.CurrentWorksheet.SetScale(2.0F)
//C#
rgrid.CurrentWorksheet.ScaleFactor = Convert.ToSingle(cboZoom.Text.Replace("%", string.Empty)) / 100.0F;
rgrid.CurrentWorksheet.ZoomIn();
rgrid.CurrentWorksheet.ZoomOut();
rgrid.CurrentWorksheet.ZoomReset();
rgrid.CurrentWorksheet.SetScale(2.0F);

Получение данных о выбранном диапазоне

Этот код необходим для настройки пользовательского интерфейса при выборе пользователем другой ячейки или диапазона. Данный код работает в обработчике события SelectionRangeChanged компонента Reogrid

'VB
If e.Range.IsEmpty = True Then MsgBox("Выбран пустой диапазон") : Exit Sub 'Ничего не выбрано - можно не продолжать
lblStatus.Text = "Выделенный диапазон: " & rgrid.CurrentWorksheet.SelectionRange.ToString()

Dim MyStyle As New WorksheetRangeStyle 'Создаём экземпляр стиля
MyStyle = rgrid.CurrentWorksheet.GetRangeStyles(rgrid.CurrentWorksheet.SelectionRange)

cboFontName.Text = MyStyle.FontName 'Гарнитура шрифта
cboFontSize.Text = Convert.ToString(MyStyle.FontSize) 'Кегль шрифта (размер)
chkFontBold.Checked = MyStyle.Bold 'Полужирный
chkFontItalic.Checked = MyStyle.Italic 'Курсив
chkFontUnderline.Checked = MyStyle.Underline 'Подчёркнутый
chkFontStrike.Checked = MyStyle.Strikethrough 'Зачёркнутый
'grpBackgroundColor.BackColor = MyStyle.BackColor 'Цвет фона
'MyStyle.CopyFrom
'MyStyle.FillPatternColor
'MyStyle.FillPatternStyle

'Выравнивание по левому краю
If MyStyle.HAlign = ReoGridHorAlign.Left Then
    radTextAlignLeft.Checked = True
Else
    radTextAlignLeft.Checked = False
End If

'Горизонтальная центровка
If MyStyle.HAlign = ReoGridHorAlign.Center Then
    radTextAlignCenter.Checked = True
Else
    radTextAlignCenter.Checked = False
End If

'Выравнивание по правому краю
If MyStyle.HAlign = ReoGridHorAlign.Right Then
    radTextAlignRight.Checked = True
Else
    radTextAlignRight.Checked = False
End If

'Распределённый отступ
If MyStyle.HAlign = ReoGridHorAlign.DistributedIndent Then
    radTextDisributedIndent.Checked = True
Else
    radTextDisributedIndent.Checked = False
End If

'MyStyle.HAlign.General
'MyStyle.Padding
'grpTextColor.BackColor = MyStyle.TextColor 'Цвет текста
chkTextWrap.Checked = Convert.ToBoolean(MyStyle.TextWrapMode) 'Перенос по словам

'Вертикальное выравнивание: Сверху
If MyStyle.VAlign = ReoGridVerAlign.Top Then
    radTextAlignTop.Checked = True
Else
    radTextAlignTop.Checked = False
End If

'Вертикальное выравнивание: Посередине
If MyStyle.VAlign = ReoGridVerAlign.Middle Then
    radTextAlignMiddle.Checked = True
Else
    radTextAlignMiddle.Checked = False
End If

'Вертикальное выравнивание: Снизу
If MyStyle.VAlign = ReoGridVerAlign.Bottom Then
    radTextAlignBottom.Checked = True
Else
    radTextAlignBottom.Checked = False
End If
//C#
if (e.Range.IsEmpty == true){MessageBox.Show("Выбран пустой диапазон");return;
}
//Ничего не выбрано - можно не продолжать
lblStatus.Text = "Выделенный диапазон: " + rgrid.CurrentWorksheet.SelectionRange.ToString();

WorksheetRangeStyle MyStyle = new WorksheetRangeStyle();
//Создаём экземпляр стиля
MyStyle = rgrid.CurrentWorksheet.GetRangeStyles(rgrid.CurrentWorksheet.SelectionRange);

cboFontName.Text = MyStyle.FontName; //Гарнитура шрифта
cboFontSize.Text = Convert.ToString(MyStyle.FontSize); //Кегль шрифта (размер)
chkFontBold.Checked = MyStyle.Bold; //Полужирный
chkFontItalic.Checked = MyStyle.Italic; //Курсив
chkFontUnderline.Checked = MyStyle.Underline; //Подчёркнутый
chkFontStrike.Checked = MyStyle.Strikethrough; //Зачёркнутый
//grpBackgroundColor.BackColor = MyStyle.BackColor; //Цвет фона
//MyStyle.CopyFrom
//MyStyle.FillPatternColor
//MyStyle.FillPatternStyle

//Выравнивание по левому краю
if (MyStyle.HAlign == ReoGridHorAlign.Left) {
radTextAlignLeft.Checked = true;
} else {
radTextAlignLeft.Checked = false;
}

//Горизонтальная центровка
if (MyStyle.HAlign == ReoGridHorAlign.Center) {
radTextAlignCenter.Checked = true;
} else {
radTextAlignCenter.Checked = false;
}

//Выравнивание по правому краю
if (MyStyle.HAlign == ReoGridHorAlign.Right) {
radTextAlignRight.Checked = true;
} else {
radTextAlignRight.Checked = false;
}

//Распределённый отступ
if (MyStyle.HAlign == ReoGridHorAlign.DistributedIndent) {
radTextDisributedIndent.Checked = true;
} else {
radTextDisributedIndent.Checked = false;
}

//MyStyle.HAlign.General
//MyStyle.Padding
//grpTextColor.BackColor = MyStyle.TextColor; //Цвет текста
chkTextWrap.Checked = Convert.ToBoolean(MyStyle.TextWrapMode); //Перенос по словам

//Вертикальное выравнивание: Сверху
if (MyStyle.VAlign == ReoGridVerAlign.Top) {
radTextAlignTop.Checked = true;
} else {
radTextAlignTop.Checked = false;
}

//Вертикальное выравнивание: Посередине
if (MyStyle.VAlign == ReoGridVerAlign.Middle) {
radTextAlignMiddle.Checked = true;
} else {
radTextAlignMiddle.Checked = false;
}

//Вертикальное выравнивание: Снизу
if (MyStyle.VAlign == ReoGridVerAlign.Bottom) {
radTextAlignBottom.Checked = true;
} else {
radTextAlignBottom.Checked = false;
}		

Диаграммы (Charts)

Могут быть созданы в Reogrid или быть загружены из файла в формате xlsx

Всего доступно 4 вида диаграмм: линейная (Line Chart), круговая (Pie 2D Chart), гистограмма (Column Chart), горизонтальная гистограмма (BarChart). Последние три доступны лишь в версии Pro.

Создание линейной диаграммы

Процесс состоит из нескольких этапов:

  1. создаём источник данных (если он не существует), определяем расположение данных;
  2. создаём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка;
  3. указываем источники данных, добавляем экземпляр диаграммы на лист.
'VB
'Подготовка источника данных.
Dim worksheet = Me.rgrid.CurrentWorksheet
worksheet("A2") = New Object(,) {
  {Nothing, 2008, 2009, 2010, 2011, 2012},
  {"Город 1", 3, 2, 4, 2, 6},
  {"Город 2", 7, 5, 3, 6, 4},
  {"Город 3", 13, 10, 9, 10, 9},
  {"Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)",
    "=SUM(E3:E5)", "=SUM(F3:F5)"}}

'Указываем диапазон ячеек с данными и выделяем диапазон
Dim dataRange As unvell.ReoGrid.ReoGridRange = worksheet.Ranges("B3:F5")
Dim serialNamesRange As unvell.ReoGrid.ReoGridRange = worksheet.Ranges("A3:A6")
Dim categoryNamesRange As unvell.ReoGrid.ReoGridRange = worksheet.Ranges("B2:F2")

worksheet.AddHighlightRange(categoryNamesRange)
worksheet.AddHighlightRange(serialNamesRange)
worksheet.AddHighlightRange(dataRange)

'1
Dim lineChart As unvell.ReoGrid.Chart.LineChart = New unvell.ReoGrid.Chart.LineChart
lineChart.Location = New Graphics.Point(10, 200)
lineChart.Size = New Graphics.Size(400, 320)
lineChart.Title = "Пример линейной диаграммы"

'2
lineChart.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, serialNamesRange, dataRange)
lineChart.DataSource.RowTitleRange = serialNamesRange
lineChart.DataSource.ColTitleRange = categoryNamesRange
worksheet.FloatingObjects.Add(lineChart)
//C#
//Подготовка источника данных.
Worksheet worksheet = this.rgrid.CurrentWorksheet;
worksheet["A2"] = new object[,] {
  { null, 2008, 2009, 2010, 2011, 2012 },
  { "Город 1", 3, 2, 4, 2, 6 },
  { "Город 2", 7, 5, 3, 6, 4 },
  { "Город 3", 13, 10, 9, 10, 9 },
  { "Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", 
    "=SUM(E3:E5)", "=SUM(F3:F5)" },
};

//Указываем диапазон ячеек с данными и выделяем диапазон
var dataRange = worksheet.Ranges["B3:F5"];
var serialNamesRange = worksheet.Ranges["A3:A6"];
var categoryNamesRange = worksheet.Ranges["B2:F2"];

worksheet.AddHighlightRange(categoryNamesRange);
worksheet.AddHighlightRange(serialNamesRange);
worksheet.AddHighlightRange(dataRange);
//1
unvell.ReoGrid.Chart.LineChart lineChart = new unvell.ReoGrid.Chart.LineChart(); 

  lineChart.Location = new unvell.ReoGrid.Graphics.Point(440, 20);
  lineChart.Size = new unvell.ReoGrid.Graphics.Size(400, 260);
  lineChart.Title = "Пример линейной диаграммы";

//2
  lineChart.DataSource = new WorksheetChartDataSource(worksheet, serialNamesRange, dataRange);
lineChart.DataSource.RowTitleRange = serialNamesRange;
lineChart.DataSource.ColTitleRange = categoryNamesRange;
  
worksheet.FloatingObjects.Add(lineChart);

reogrid_charts_linear

Создание вертикальной гистограммы (Pro).

Процесс состоит из нескольких этапов:

  1. Размещаем данные в таблице.
  2. Указываем диапазон ячеек с данными и выделяем диапазон. Создаём три диапазона, диапазона источников данных, диапазон строк заголовков и диапазон заголовков столбцов, добавляем эти диапазоны в коллекцию выделенных диапазонов.
  3. Созданиём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка.
  4. Указываем источники данных, добавляем экземпляр диаграммы на лист.
'VB
'1
Dim worksheet = Me.rgrid.CurrentWorksheet
worksheet("A2") = New Object(,) {
  {Nothing, 2008, 2009, 2010, 2011, 2012},
  {"Город 1", 3, 2, 4, 2, 6},
  {"Город 2", 7, 5, 3, 6, 4},
  {"Город 3", 13, 10, 9, 10, 9},
  {"Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)",
    "=SUM(E3:E5)", "=SUM(F3:F5)"}}

'2
Dim dataRange = worksheet.Ranges("B3:F5")
Dim rowTitleRange = worksheet.Ranges("A3:A6")
Dim colTitleRange = worksheet.Ranges("B2:F2")
worksheet.AddHighlightRange(rowTitleRange)
worksheet.AddHighlightRange(colTitleRange)
worksheet.AddHighlightRange(dataRange)

'3
Dim c1 As unvell.ReoGrid.Chart.Chart = New unvell.ReoGrid.Chart.ColumnChart
c1.Location = New Graphics.Point(10, 140)
c1.Size = New Graphics.Size(400, 320)
c1.Title = "Пример гистограммы"

'4
c1.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange)
c1.DataSource.RowTitleRange = rowTitleRange
c1.DataSource.ColTitleRange = colTitleRange
worksheet.FloatingObjects.Add(c1)
//C#
//1
Worksheet worksheet = this.rgrid.CurrentWorksheet;
worksheet["A2"] = new object[,] {
  { null, 2008, 2009, 2010, 2011, 2012 },
  { "Город 1", 3, 2, 4, 2, 6 },
  { "Город 2", 7, 5, 3, 6, 4 },
  { "Город 3", 13, 10, 9, 10, 9 },
  { "Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", 
    "=SUM(E3:E5)", "=SUM(F3:F5)" },
};

//2
var dataRange = worksheet.Ranges["B3:F5"];
var rowTitleRange = worksheet.Ranges["A3:A6"];
var colTitleRange = worksheet.Ranges["B2:F2"];
worksheet.AddHighlightRange(rowTitleRange);
worksheet.AddHighlightRange(colTitleRange);
worksheet.AddHighlightRange(dataRange);

//3
unvell.ReoGrid.Chart.Chart c1 = new unvell.ReoGrid.Chart.ColumnChart();
c1.Location = new unvell.ReoGrid.Graphics.Point(10, 140);
c1.Size = new unvell.ReoGrid.Graphics.Size(400, 320);
c1.Title = "Пример гистограммы";

//4
c1.DataSource = new unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange);
c1.DataSource.RowTitleRange = rowTitleRange;
c1.DataSource.ColTitleRange = colTitleRange;
worksheet.FloatingObjects.Add(c1);

reogrid_charts_columnchart

Создание круговой 2D диаграммы Pie (Pro)

  1. Создаём лист и добавляем данные.
  2. Определяем два диапазона: источник данных и заголовки, добавляем эти диапазоны в коллекцию
  3. Создаём экземпляр диаграммы, задаём заголовок, источники данных. После этого добавляем её в коллекцию диаграмм.
'VB
'1
Dim worksheet As unvell.ReoGrid.Worksheet = Me.rgrid.CurrentWorksheet
worksheet("A2") = New Object(,) {
  {Nothing, 2008, 2009, 2010, 2011, 2012},
  {"Город 1", 3, 2, 4, 2, 6}}

'2
Dim dataRange = worksheet.Ranges("B3:F3")
Dim titleRange = worksheet.Ranges("B2:F2")
worksheet.AddHighlightRange(dataRange)
worksheet.AddHighlightRange(titleRange)

'3
Dim cpie As unvell.ReoGrid.Chart.Chart = New unvell.ReoGrid.Chart.Pie2DChart
cpie.Location = New Graphics.Point(10, 140)
cpie.Size = New Graphics.Size(400, 320)
cpie.Title = "Пример круговой 2D диаграммы"
cpie.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, titleRange, dataRange)
cpie.DataSource.CategoryNameRange = titleRange
worksheet.FloatingObjects.Add(cpie)
//C#
//1
Worksheet worksheet = this.rgrid.CurrentWorksheet;
worksheet["A2"] = new object[,] {
  { null, 2008, 2009, 2010, 2011, 2012 },
  { "Город 1", 3, 2, 4, 2, 6 },
};

//2
var dataRange = worksheet.Ranges["B3:F3"];
var titleRange = worksheet.Ranges["B2:F2"];
worksheet.AddHighlightRange(dataRange);
worksheet.AddHighlightRange(titleRange);

//3
unvell.ReoGrid.Chart.Pie2DChart cpie = new unvell.ReoGrid.Chart.Pie2DChart();
cpie.Location = new unvell.ReoGrid.Graphics.Point(10, 140);
cpie.Size = new unvell.ReoGrid.Graphics.Size(400, 320);
cpie.Title = "Пример круговой 2D диаграммы";
cpie.DataSource = new unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, titleRange, dataRange);
cpie.DataSource.CategoryNameRange = titleRange;
worksheet.FloatingObjects.Add(cpie);

reogrid_charts_pie2d

Создание горизонтальной гистограммы. Процесс состоит из нескольких этапов (Pro)

  1. Подготовка источника данных.
  2. Указываем диапазон ячеек с данными и выделяем диапазон. Создаём три диапазона, диапазона источников данных, диапазон строк заголовков и диапазон заголовков столбцов, добавляем эти диапазоны в коллекцию выделенных диапазонов.
  3. Созданиём экземпляр диаграммы, указываем расположение верхней левой точки, размер и текст заголовка.
  4. Указываем источники данных, добавляем экземпляр диаграммы на лист.
'VB
'1
Dim worksheet As unvell.ReoGrid.Worksheet = Me.rgrid.CurrentWorksheet
worksheet("A2") = New Object(,) {
  {Nothing, 2008, 2009, 2010, 2011, 2012},
  {"Город 1", 3, 2, 4, 2, 6},
  {"Город 2", 7, 5, 3, 6, 4},
  {"Город 3", 13, 10, 9, 10, 9},
  {"Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)",
    "=SUM(E3:E5)", "=SUM(F3:F5)"}}

'2
Dim dataRange = worksheet.Ranges("B3:F5")
Dim rowTitleRange = worksheet.Ranges("A3:A6")
Dim colTitleRange = worksheet.Ranges("B2:F2")
worksheet.AddHighlightRange(rowTitleRange)
worksheet.AddHighlightRange(colTitleRange)
worksheet.AddHighlightRange(dataRange)

'3
Dim cbar As unvell.ReoGrid.Chart.Chart = New unvell.ReoGrid.Chart.BarChart
cbar.Location = New Graphics.Point(10, 140)
cbar.Size = New Graphics.Size(400, 320)
cbar.Title = "Пример горизонтальной гистограммы"

'4
cbar.DataSource = New unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange)
cbar.DataSource.RowTitleRange = rowTitleRange
cbar.DataSource.ColTitleRange = colTitleRange
worksheet.FloatingObjects.Add(cbar)
//C#
//1
var worksheet = this.rgrid.CurrentWorksheet;
worksheet["A2"] = new object[,] {
  { null, 2008, 2009, 2010, 2011, 2012 },
  { "Город 1", 3, 2, 4, 2, 6 },
  { "Город 2", 7, 5, 3, 6, 4 },
  { "Город 3", 13, 10, 9, 10, 9 },
  { "Всего", "=SUM(B3:B5)", "=SUM(C3:C5)", "=SUM(D3:D5)", 
    "=SUM(E3:E5)", "=SUM(F3:F5)" },
};

//2
var dataRange = worksheet.Ranges["B3:F5"];
var rowTitleRange = worksheet.Ranges["A3:A6"];
var colTitleRange = worksheet.Ranges["B2:F2"];
worksheet.AddHighlightRange(rowTitleRange);
worksheet.AddHighlightRange(colTitleRange);
worksheet.AddHighlightRange(dataRange);

//3
unvell.ReoGrid.Chart.Chart cbar = new unvell.ReoGrid.Chart.BarChart();
cbar.Location = new unvell.ReoGrid.Graphics.Point(10, 140);
cbar.Size = new unvell.ReoGrid.Graphics.Size(400, 320);
cbar.Title = "Пример горизонтальной гистограммы";

//4
cbar.DataSource = new unvell.ReoGrid.Chart.WorksheetChartDataSource(worksheet, rowTitleRange, dataRange);
cbar.DataSource.RowTitleRange = rowTitleRange;
cbar.DataSource.ColTitleRange = colTitleRange;
worksheet.FloatingObjects.Add(cbar);

reogrid_charts_barchart

Плавающие объекты (Pro)

ReoGrid поддерживает рисуемые объекты, создание на листе диаграмм, плавающих изображений и отображения графических примитивов: прямоугольников, линий, прямоугольников со скруглёнными углами. Также поддерживается считывание плавающих объектов из файла Excel; используя этот функционал, .Net-приложениях можно отображать основанные на Excel отчёты с рисунками и диаграммами.

Плавающие объекты вынесены в новое свойство листа, через которое возможен полный доступ к ним: worksheet.FloatingObjects()

Поддержка Excel

Плавающие объекты будут автоматически загружаться из файла Excel и сохраняться в нём.

Создание плавающих объектов

Пример 1. Создание объекта-прямоугольника. Выполняются следующие действия:

  1. Создание экземпляра прямоугольника, задание его расположения и размеров.
  2. Добавление плавающего объекта на лист. Для этого нужно добавить его в коллекцию плавающих объектов. В данном случае получаем текущий лист и пополняем его коллекцию.
'VB
Dim rectObj As unvell.ReoGrid.Drawing.Shapes.RectangleShape = New unvell.ReoGrid.Drawing.Shapes.RectangleShape()
rectObj.Location = New Graphics.Point(50, 50)
rectObj.Size = New Graphics.Size(200, 100)
Dim worksheet As unvell.ReoGrid.Worksheet = rgrid.CurrentWorksheet  'Control.CurrentWorksheet
worksheet.FloatingObjects.Add(rectObj)
//C#
unvell.ReoGrid.Drawing.Shapes.RectangleShape rectObj = new unvell.ReoGrid.Drawing.Shapes.RectangleShape();
rectObj.Location = new unvell.ReoGrid.Graphics.Point(50, 50);
rectObj.Size = new unvell.ReoGrid.Graphics.Size(200, 100);
Worksheet worksheet = this.rgrid.CurrentWorksheet;
worksheet.FloatingObjects.Add(rectObj);

Результат:

reogrid_floatingobjects_rectangleshape

Пример 2. Добавление плавающего изображения (полный функционал доступен в версии Pro)

  1. Получаем текущий лист.
  2. Создаём изображение из файла.
  3. Добавляем изображение на лист с указанием расположения.
'VB
Dim worksheet1 = Me.rgrid.CurrentWorksheet
Dim image1 As System.Drawing.Image = My.Resources.photo 'Image.FromFile("Sample.png")
worksheet1.FloatingObjects.Add(New Drawing.ImageObject(image1))
worksheet1.FloatingObjects(0).Location = New Graphics.Point(40, 30)
//C#
Worksheet worksheet1 = this.rgrid.CurrentWorksheet;
    System.Drawing.Image image1 = reogrid_test_CSharp.Properties.Resources.photo; //Image.FromFile("Sample.png");
    worksheet1.FloatingObjects.Add(new unvell.ReoGrid.Drawing.ImageObject(image1));
    worksheet1.FloatingObjects[0].Location = new unvell.ReoGrid.Graphics.Point(40, 30);

Результат:

reogrid_floatingobjects_image

Отображение текста в формате RTF (Rich format text) (доступно в версии Pro)

Данный формат представлен в виде класса unvell.ReoGrid.Drawing.RichText()

Экземпляр этого класса представляет собой объект, который можно отобразить внутри ячейки или в рисуемых объектах.

Для отображения форматированного текста в рисуемых объектах, нужно создать экземпляр класса RichText, добавить в него текст, поместить экземпляр класса в рисуемые объекты.

Рассмотрим пример: отображение текста в ячейке

Для этого потребуется создать экземпляр класса RichText, добавить в него текст и поместить в ячейку.

  1. Выбираем лист;
  2. Создаём экземпляр класса RichText;
  3. Добавляем фрагмент текста чёрного цвета;
  4. Добавляем фрагмент текста с указанием гарнитуры шрифта, кегля (размера), цвета и стиля: Arial, 10пт, тёмно-синий, полужирный;
  5. Добавляем ещё три фрагмента – каждый своим цветом;
  6. Помещаем полученный экземпляр класса в ячейку.
'VB
Dim worksheet As Worksheet = rgrid.CurrentWorksheet
Dim rt As unvell.ReoGrid.Drawing.RichText = New unvell.ReoGrid.Drawing.RichText()
rt.AddText("Фрагмент ", unvell.ReoGrid.Graphics.SolidColor.Black)
rt.AddText("текста ", "Arial", 10.25F, unvell.ReoGrid.Graphics.SolidColor.DarkBlue, unvell.ReoGrid.Graphics.SolidColor.Transparent, Drawing.Text.FontStyles.Bold)
rt.AddText("должен отобразиться ", unvell.ReoGrid.Graphics.SolidColor.Black)
rt.AddText("красным цветом", unvell.ReoGrid.Graphics.SolidColor.Red)
rt.AddText(".", unvell.ReoGrid.Graphics.SolidColor.Black)
worksheet("B2") = rt
//C#
Worksheet worksheet = this.rgrid.CurrentWorksheet;
unvell.ReoGrid.Drawing.RichText rt = new unvell.ReoGrid.Drawing.RichText();
rt.AddText("Фрагмент ", unvell.ReoGrid.Graphics.SolidColor.Black);
rt.AddText("текста ", "Arial", 10.25f, unvell.ReoGrid.Graphics.SolidColor.DarkBlue, unvell.ReoGrid.Graphics.SolidColor.Transparent, unvell.ReoGrid.Drawing.Text.FontStyles.Bold);
rt.AddText("должен отобразиться ", unvell.ReoGrid.Graphics.SolidColor.Black);
rt.AddText("красным цветом", unvell.ReoGrid.Graphics.SolidColor.Red);
rt.AddText(".", unvell.ReoGrid.Graphics.SolidColor.Black);
worksheet["B2"] = rt;

Результат:

Пара примеров функций из англоязычной документации

Данный код можно поместить в обработчики событий Click кнопок.

Пример 1. Настраиваемые заголовки

'VB
rgrid.CurrentWorksheet.Resize(10, 7) 'Меняем размер и получаем 10 строк и 7 столбцов

'Приводим стиль первого заголовка к типу "Флажок" (Сheckbox)
Dim checkBoxHeader = rgrid.CurrentWorksheet.ColumnHeaders(0)
checkBoxHeader.Text = String.Empty
'checkBoxHeader.DefaultCellBody = TypeOf(CheckBoxCell)
checkBoxHeader.Width = 30 'Ширина заголовка: 30 пикселей
checkBoxHeader.Style.HorizontalAlign = ReoGridHorAlign.Center
checkBoxHeader.Style.Padding = New unvell.ReoGrid.PaddingValue(3)

'Установка других заголовков
rgrid.CurrentWorksheet.ColumnHeaders(1).Text = "Продукт"
rgrid.CurrentWorksheet.ColumnHeaders(2).Text = "Цена за единицу"
rgrid.CurrentWorksheet.ColumnHeaders(3).Text = "Скидка"
rgrid.CurrentWorksheet.ColumnHeaders(4).Text = "Количество"
rgrid.CurrentWorksheet.ColumnHeaders(5).Text = "Расширенная цена"
rgrid.CurrentWorksheet.ColumnHeaders(6).Text = "Примечание"

'устанавливаем ширину столбцов (1-4)
rgrid.CurrentWorksheet.SetColumnsWidth(1, 5, 100)

'Включение режима выделения только одной ячейки
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Cell

'Определение региона как диапазона записей
Dim recordRange = rgrid.CurrentWorksheet.DefineNamedRange("records", 0, 0, 4, 6)

'Применение формулы с использованием относительного адреса в порядке для подсчёта каждой строки
'Итоговая цена = (цена за единицу - скидка) * количество
Dim extendedPriceFormula = "=( INDIRECT(ADDRESS(ROW(), COLUMN()-3)) " & " - INDIRECT(ADDRESS(ROW(), COLUMN()-2)) )" & " * INDIRECT(ADDRESS(ROW(), COLUMN()-1) )"

'Вводим данные
recordRange.Data = New Object(,) {
{False, "Процессор", "230", "0", "1", extendedPriceFormula},
{True, "Системная плата", "120", "5", "1", extendedPriceFormula},
{False, "Память", "90", "0", "2", extendedPriceFormula},
{False, "VGA", "310", "0", "1", extendedPriceFormula}
}

'Сбрасываем стиль курсора для ячеек к обычному виду
rgrid.CellsSelectionCursor = Cursors.Default

'Получаем формулу из выбранной ячейки и отображаем её
'AddHandler rgrid.CurrentWorksheet.FocusPosChanged, AddressOf rGrid_FocusPosChanged
'Sub rGrid_FocusPosChanged(sender,e)
'lblStatus.Text = rgrid.CurrentWorksheet.GetCellFormula(rgrid.CurrentWorksheet.FocusPos)
'End Sub
//C#
rgrid.CurrentWorksheet.Resize(10, 7);
//Меняем размер и получаем 10 строк и 7 столбцов

//Приводим стиль первого заголовка к типу "Флажок" (Сheckbox)
dynamic checkBoxHeader = rgrid.CurrentWorksheet.ColumnHeaders[0];
checkBoxHeader.Text = string.Empty;
//checkBoxHeader.DefaultCellBody = TypeOf(CheckBoxCell)
checkBoxHeader.WidthInPixel = 30;
//Ширина заголовка: 30 пикселей
checkBoxHeader.Style.HorizontalAlign = ReoGridHorAlign.Center;
checkBoxHeader.Style.Padding = new unvell.ReoGrid.PaddingValue(3);

//Установка других заголовков
rgrid.CurrentWorksheet.ColumnHeaders[1].Text = "Продукт";
rgrid.CurrentWorksheet.ColumnHeaders[2].Text = "Цена за единицу";
rgrid.CurrentWorksheet.ColumnHeaders[3].Text = "Скидка";
rgrid.CurrentWorksheet.ColumnHeaders[4].Text = "Количество";
rgrid.CurrentWorksheet.ColumnHeaders[5].Text = "Расширенная цена";
rgrid.CurrentWorksheet.ColumnHeaders[6].Text = "Примечание";

//устанавливаем ширину столбцов (1-4)
rgrid.CurrentWorksheet.SetColumnsWidth(1, 5, 100);

//Включение режима выделения только одной ячейки
rgrid.CurrentWorksheet.SelectionMode = unvell.ReoGrid.WorksheetSelectionMode.Cell;

//Определение региона как диапазона записей
dynamic recordRange = rgrid.CurrentWorksheet.DefineNamedRange("records", 0, 0, 4, 6);

//Применение формулы с использованием относительного адреса в порядке для подсчёта каждой строки
//Итоговая цена = (цена за единицу - скидка) * количество
dynamic extendedPriceFormula = "=( INDIRECT(ADDRESS(ROW(), COLUMN()-3)) " + " - INDIRECT(ADDRESS(ROW(), COLUMN()-2)) )" + " * INDIRECT(ADDRESS(ROW(), COLUMN()-1) )";

//Вводим данные
recordRange.Data = new object[ , ] {
{false,"Процессор","230","0","1",extendedPriceFormula},
{true,"Системная плата","120","5","1",extendedPriceFormula},
{false,"Память","90","0","2",extendedPriceFormula},
{false,"VGA","310","0","1",extendedPriceFormula}
};

//Сбрасываем стиль курсора для ячеек к обычному виду
rgrid.CellsSelectionCursor = Cursors.Default;

//Получаем формулу из выбранной ячейки и отображаем её
/*rgrid.CurrentWorksheet.FocusPosChanged += rGrid_FocusPosChanged;

public void rGrid_FocusPosChanged(sender, e)
{
lblStatus.Text = rgrid.CurrentWorksheet.GetCellFormula(rgrid.CurrentWorksheet.FocusPos);
}*/

Пример 2. Определение разрешённого для редактирования диапазона

Многие события, происходящие перед основными, поддерживают свойство IsCancelled. Если его установить в True, Reogrid отменит соответствующую операцию. Обычно используется для предотвращения правки ячеек или операций сворачивания/разворачивания

'VB
'Пример: текст можно править лишь в чётко определённом диапазоне:
Dim editableRange = New ReoGridRange(3, 1, 2, 3)
rgrid.CurrentWorksheet.SetRangeBorders(editableRange, BorderPositions.Outside, RangeBorderStyle.BlackSolid)
rgrid.CurrentWorksheet(2, 1) = "Правка разрешена только для этого диапазона:"

'AddHandler rgrid.CurrentWorksheet.BeforeCellEdit, AddressOf rgrid_BeforeCellEdit
'Sub rgrid_BeforeCellEdit(ByVal sender, ByVal e)
'e.IsCancelled = Not rgrid.CurrentWorksheet(1, 1, 2, 2).Contains(e.Cell.GetPos())
'End Sub
//C#
//Пример: текст можно править лишь в чётко определённом диапазоне:
{  
    ReoGridRange editableRange = new ReoGridRange(3, 1, 2, 3);
    rgrid.CurrentWorksheet.SetRangeBorders(editableRange, BorderPositions.Outside, RangeBorderStyle.BlackSolid);
    rgrid.CurrentWorksheet[2, 1] = "Правка разрешена только для этого диапазона:";
    
    //rgrid.CurrentWorksheet.BeforeCellEdit += rgrid_BeforeCellEdit;
}

/*public void rgrid_BeforeCellEdit(sender, e)
{
e.IsCancelled = !rgrid.CurrentWorksheet(1, 1, 2, 2).Contains(e.Cell.GetPos());
}*/

Руководство подготовлено для сайта reogrid.net.

Может содержать некоторые неточности и ошибок в плане оформления.

Программный код проверялся для VB.Net/С# 2012 синтаксическим анализатором Visual Studio. Код на Visual Basic проверен тестовым приложением.

Использованы изображения из английской версии руководства, а также снимок экрана из проекта Euro Truck Simulator 2