Рассмотрим основные моменты работы с компонентом на конкретных примерах. То есть, на основе рассмотренных ниже фрагментов кода можно собрать работоспособный редактор таблиц. Изначально подразумевается, что на форму добавлен компонент Reogrid с именем rgrid.
Для создания простого редактора будет достаточно подключить следующие пространства имён:
'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 //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
Этот фрагмент кода можно включить в состав процедуры Form_Load
Все компоненты с префиксом 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 = "Выберите гарнитуру" //C# 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 = "Выберите гарнитуру";
'VB cboZoom.Items.AddRange({"25%", "50%", "75%", "100%", "125%", "150%", "200%"}) //C# cboZoom.Items.AddRange({"25%", "50%", "75%", "100%", "125%", "150%", "200%"});
'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()");
Из книги удаляются все листы, создаётся единственный и пустой
'VB rgrid.Reset() //C# rgrid.Reset();
Если нужно сбросить только текущий лист, то поступаем аналогично
'VB rgrid.CurrentWorksheet.Reset() //C# rgrid.CurrentWorksheet.Reset();
Загрузка данных выполняется при помощи перегруженной функции Load (для всей книги) или по одному листу с использованием функций LoadCSV, LoadRGF, которые вполне могут исчезнуть в следующих версиях.
Первым её параметром может быть имя файла или файловый поток ввода-вывода
Второй параметр - формат открываемого файла из перечисления IO.FileFormat (CSV, Excel2007, ReoGridFormat, _Auto - автовыбор, _Custom - ещё не реализован)
Третий и необязательный параметр - кодировка символов. Его использование требует импортировать пространство имён System.Text
2.1 Пример кода для загрузки данных из файла формата ReoGridFormat с использованием файлового потока
'VB Using ss As FileStream = New FileStream(Application.StartupPath & "\test.rgf", FileMode.Create, FileAccess.Read) rgrid.Load(ss, IO.FileFormat.ReoGridFormat, Encoding.UTF8) End Using //C# using (FileStream ss = new FileStream(Application.StartupPath + "\\test.rgf", FileMode.Create, FileAccess.Read)) { rGrid.Load(ss, IO.FileFormat.ReoGridFormat, Encoding.UTF8); }
2.2 Загрузка данных из файла формата CSV
Вариант с функцией Load (книга целиком)
'VB rgrid.Load(Application.StartupPath & "\test.csv", IO.FileFormat.CSV, Encoding.UTF8) //C# rgrid.Load(Application.StartupPath + "\\test.csv", IO.FileFormat.CSV, Encoding.UTF8);
Вариант с функцией LoadCSV (только один лист)
'VB rgrid.CurrentWorksheet.LoadCSV(Application.StartupPath & "\test.csv", Encoding.UTF8) //C# rgrid.CurrentWorksheet.LoadCSV(Application.StartupPath + "\\test.csv", Encoding.UTF8);
'VB rgrid.Load(Application.StartupPath & "\test.rgf", IO.FileFormat.ReoGridFormat, Encoding.UTF8) //C# rgrid.Load(Application.StartupPath + "\\test.rgf", IO.FileFormat.ReoGridFormat, Encoding.UTF8);
'VB rgrid.Load(Application.StartupPath & "\test.xlsx", IO.FileFormat.Excel2007, Encoding.UTF8) //C# rgrid.Load(Application.StartupPath + "\\test.xlsx", IO.FileFormat.Excel2007, Encoding.UTF8);
Сохранение данных выполняется при помощи перегруженной функции Save. Её параметры аналогичны функции Load
Первым её параметром может быть имя файла или файловый поток ввода-вывода
Второй параметр - формат открываемого файла из перечисления IO.FileFormat (CSV, Excel2007, ReoGridFormat, _Auto - автовыбор, _Custom - ещё не реализован)
Третий и необязательный параметр - кодировка символов. Его использование требует импортировать пространство имён System.Text
3.1 Пример кода для сохранения данных в файл формата ReoGridFormat с использованием файлового потока
'VB Using ss As FileStream = New FileStream(Application.StartupPath & "\test.rgf", FileMode.Create, FileAccess.Write) rgrid.Save(ss, IO.FileFormat.ReoGridFormat, Encoding.UTF8) End Using //C# using (FileStream ss = new FileStream(Application.StartupPath + "\\test.rgf", FileMode.Create, FileAccess.Write)) { rGrid.Save(ss, IO.FileFormat.ReoGridFormat, Encoding.UTF8); }
3.2 Сохранение в файле формата CSV
'VB rgrid.Save(Application.StartupPath & "\test.csv", IO.FileFormat.CSV, Encoding.UTF8) //C# rgrid.Save(Application.StartupPath + "\\test.csv", IO.FileFormat.CSV, Encoding.UTF8);
3.3 Сохранение в файле формата ReoGridFormat
'VB rgrid.Save(Application.StartupPath & "\test.rgf", IO.FileFormat.ReoGridFormat, Encoding.UTF8) //C# rgrid.Save(Application.StartupPath + "\\test.rgf", IO.FileFormat.ReoGridFormat, Encoding.UTF8);
3.4 Сохранение в файле формата Excel 2007
'VB rgrid.Save(Application.StartupPath & "\test.xlsx", IO.FileFormat.Excel2007, Encoding.UTF8) //C# rgrid.Save(Application.StartupPath + "\\test.xlsx", IO.FileFormat.Excel2007, Encoding.UTF8);
Экспорт выполняется только через файловый поток и только для одного листа. Возможны два варианта: с заголовком (title) по умолчанию или же с произвольным заголовком
'VB 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# using (FileStream ss = new FileStream(Application.StartupPath + "\\test.html", FileMode.Create, FileAccess.Write)) { rgrid.CurrentWorksheet.ExportAsHTML(ss); //Заголовок по умолчанию rgrid.CurrentWorksheet.ExportAsHTML(ss, "Произвольный заголовок"); //Произвольный заголовок }
При выводе содержимого таблицы на печать, её содержимое разделяется между страницами, как в MS Excel.
Для примера выполняем авторазбивку на страницы или сбрасываем область печати
При необходимости, пользователь может править автоматически расставленные линии перетаскиванием мышью
'VB rgrid.CurrentWorksheet.AutoSplitPage() //C# rgrid.CurrentWorksheet.AutoSplitPage();
Примечание: сам этот метод достаточно быстр (t<10 мс), но при использовании удалённого принтера может занять гораздо больше времени. Ниже приведён небольшой пример с использованием локального и удалённого принтеров
Текущий принтер | Затраченное время |
---|---|
Microsoft XPS Document Writer | 50 мс |
FX DocuCentre-IV C4470 (удалённый принтер) | 147 мс |
'VB rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks) //C# rgrid.CurrentWorksheet.EnableSettings(WorksheetSettings.View_ShowPageBreaks);
Если область печати не задана, ReoGrid попробует определить её самостоятельно - по содержимому ячеек
Задаём область печати через свойство PrintableRange. В качестве параметра указывается диапазон ячеек. Нумерация начинается с 0.
'VB rgrid.CurrentWorksheet.PrintableRange = New ReoGridRange(1, 1, 9, 9) //C# rgrid.CurrentWorksheet.PrintableRange == new ReoGridRange(1, 1, 9, 9);
Если печатаемый диапазон не помещается на листе выбранного формата, он будет разбит на несколько страниц.
'VB rgrid.CurrentWorksheet.PrintSettings.PageOrder = PrintPageOrder.DownThenOver //C# rgrid.CurrentWorksheet.PrintSettings.PageOrder == PrintPageOrder.DownThenOver;
Свойство PageSettings используется для изменения настроек бумаги
'VB 'Альбомная ориентация листа rgrid.CurrentWorksheet.PageSettings.Landscape = True //C# //Альбомная ориентация листа rgrid.CurrentWorksheet.PageSettings.Landscape == true;
'VB 'rgrid.CurrentWorksheet.ColumnPageBreaks.Add(5) rgrid.CurrentWorksheet.AutoSplitPage() //C# rgrid.ColumnPageBreaks.Add(5); rgrid.CurrentWorksheet.AutoSplitPage();
После выполнения указанных ниже процедур линии разрывов страниц переместятся согласно новым данным.
'VB rgrid.CurrentWorksheet.ChangeColumnPageBreak(oldIndex As Integer, newIndex As Integer) rgrid.CurrentWorksheet.ChangeRowPageBreak(oldIndex As Integer, newIndex As Integer) //C# rgrid.CurrentWorksheet.ChangeColumnPageBreak(int oldIndex, int newIndex); rgrid.CurrentWorksheet.ChangeRowPageBreak(int oldIndex, int newIndex);
'VB rgrid.CurrentWorksheet.DisableSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks) //C# rgrid.CurrentWorksheet.DisableSettings(WorksheetSettings.Behavior_AllowUserChangingPageBreaks);
'VB Using psd As PageSetupDialog = New PageSetupDialog() psd.PageSettings = rgrid.CurrentWorksheet.PageSettings.Clone() psd.AllowMargins = True psd.AllowPrinter = True psd.AllowPaper = True psd.EnableMetric = True If psd.ShowDialog() = System.Windows.Forms.DialogResult.OK Then rgrid.CurrentWorksheet.PageSettings = psd.PageSettings.Clone() rgrid.CurrentWorksheet.ClearAllPageBreaks() End If End Using //C# using (PageSetupDialog psd = new PageSetupDialog()) { psd.PageSettings = rgrid.CurrentWorksheet.PageSettings.Clone(); psd.AllowMargins = true; psd.AllowPrinter = true; psd.AllowPaper = true; psd.EnableMetric = true; if (psd.ShowDialog() == System.Windows.Forms.DialogResult.OK) { rgrid.CurrentWorksheet.PageSettings = psd.PageSettings.Clone(); rgrid.CurrentWorksheet.ClearAllPageBreaks(); } }
'VB 'Создаём документ для печати Dim doc = rgrid.CurrentWorksheet.CreatePrintDocument() 'Показываем диалоговое окно предварительного просмотра Using ppd As PrintPreviewDialog = New PrintPreviewDialog() ppd.Document = doc 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# //Создаём документ для печати { var doc = rgrid.CurrentWorksheet.CreatePrintDocument(); //Показываем диалоговое окно предварительного просмотра using (PrintPreviewDialog ppd = new PrintPreviewDialog()) { ppd.Document = doc; 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 ReoGridPrintDocument = Nothing Try doc = rgrid.CurrentWorksheet.CreatePrintDocument() Catch ex As Exception MessageBox.Show(Me, ex.Message, Me.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 doc.Dispose() 'If doc = Nothing Then Else doc.Dispose() //C# ReoGridPrintDocument doc = null; try { doc = rgrid.CurrentWorksheet.CreatePrintDocument(); } catch (Exception ex) { MessageBox.Show(this, ex.Message, this.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } using (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 = Nothing Then Else doc.Dispose() doc.Dispose();
'VB Try rgrid.CurrentWorksheet.ResetAllPageBreaks() Catch ex As Exception MsgBox(ex.Message) End Try //C# try { rgrid.CurrentWorksheet.ResetAllPageBreaks(); } catch (Exception ex) { Interaction.MsgBox(ex.Message); }
'VB If rgrid.CanUndo = True Then rgrid.Undo() //C# if (rgrid.CanUndo == true) rgrid.Undo();
'VB If rgrid.CanRedo = True Then rgrid.Redo() //C# if (rgrid.CanRedo == true) rgrid.Redo();
'VB Try rgrid.RepeatLastAction(rgrid.CurrentWorksheet.SelectionRange) Catch ex As Exception MsgBox(ex.Message) End Try //C# try { rgrid.RepeatLastAction(rgrid.CurrentWorksheet.SelectionRange); } catch (Exception ex) { Interaction.MsgBox(ex.Message); }
Небольшое отступление. О реализации работы с буфером обмена.
При копировании содержимого нескольких ячеек, например, девяти, в буфер обмена заносится текст в следующем формате: ячейки одной строки разделяются символом табуляции, строки разделяются символом перевода строки:
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
'VB If rgrid.CurrentWorksheet.CanCut = True Then rgrid.CurrentWorksheet.Cut() //C# 'if (rgrid.CurrentWorksheet.CanCut == true) rgrid.CurrentWorksheet.Cut();
Для события BeforeCut можно выполнить перехват горячих клавиш и не допустить выполнение функции:
'VB e.IsCancelled = True //C# e.IsCancelled == true
'VB If rgrid.CurrentWorksheet.CanCopy = True Then rgrid.CurrentWorksheet.Copy() //C# if (rgrid.CurrentWorksheet.CanCopy == true) rgrid.CurrentWorksheet.Copy();
Для события BeforeCopy можно выполнить перехват горячих клавиш и не допустить выполнение функции:
'VB e.IsCancelled = True //C# e.IsCancelled == true
'VB If rgrid.CurrentWorksheet.CanPaste = True Then rgrid.CurrentWorksheet.Paste() //C# if (rgrid.CurrentWorksheet.CanPaste == true) rgrid.CurrentWorksheet.Paste();
Если нужно контролировать процесс получения данных из буфера обмена:
'VB Dim text As String = Clipboard.GetText() ''Преобразование в массив типа Объект Dim data(,) As Object = RGUtility.ParseTabbedString(Text) ''Перенос данных в таблицу rgrid.CurrentWorksheet.SetRangeData(rgrid.CurrentWorksheet.SelectionRange, Data) //C# string text = Clipboard.GetText(); //Преобразование в массив типа Объект object[,] data = RGUtility.ParseTabbedString(text); //Перенос данных в таблицу rgrid.CurrentWorksheet.SetRangeData(rgrid.CurrentWorksheet.SelectionRange, data);
Для события BeforePaste можно выполнить перехват горячих клавиш и не допустить выполнение функции:
'VB e.IsCancelled = True //C# e.IsCancelled == true
'VB rgrid.CurrentWorksheet.SelectionStyle = ReoGridSelectionStyle.None //C# rgrid.CurrentWorksheet.SelectionStyle == ReoGridSelectionStyle.None;
'VB rgrid.CurrentWorksheet.SelectionStyle = ReoGridSelectionStyle.Default //C# rgrid.CurrentWorksheet.SelectionStyle == ReoGridSelectionStyle.Default;
'VB rgrid.CurrentWorksheet.SelectionStyle = ReoGridSelectionStyle.FocusRect //C# rgrid.CurrentWorksheet.SelectionStyle == ReoGridSelectionStyle.FocusRect;
'VB rgrid.CurrentWorksheet.SelectionMode = ReoGridSelectionMode.None //C# rgrid.CurrentWorksheet.SelectionMode == ReoGridSelectionMode.None;
'VB rgrid.CurrentWorksheet.SelectionMode = ReoGridSelectionMode.Cell //C# rgrid.CurrentWorksheet.SelectionMode == ReoGridSelectionMode.Cell;
'VB rgrid.CurrentWorksheet.SelectionMode = ReoGridSelectionMode.Range //C# rgrid.CurrentWorksheet.SelectionMode == ReoGridSelectionMode.Range;
'VB rgrid.CurrentWorksheet.SelectionMode = ReoGridSelectionMode.Row //C# rgrid.CurrentWorksheet.SelectionMode == ReoGridSelectionMode.Row;
'VB rgrid.CurrentWorksheet.SelectionMode = ReoGridSelectionMode.Column //C# rgrid.CurrentWorksheet.SelectionMode == ReoGridSelectionMode.Column;
'VB rgrid.CurrentWorksheet.SelectionForwardDirection = SelectionForwardDirection.Right //C# rgrid.CurrentWorksheet.SelectionForwardDirection == SelectionForwardDirection.Right;
'VB rgrid.CurrentWorksheet.SelectionForwardDirection = SelectionForwardDirection.Down //C# rgrid.CurrentWorksheet.SelectionForwardDirection == SelectionForwardDirection.Down;
'VB rgrid.CurrentWorksheet.SelectAll() //C# rgrid.CurrentWorksheet.SelectAll();
5. Другие параметры
'VB rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowGridLine, chkViewVisibleGridLines.Checked) //C# rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowGridLine, chkViewVisibleGridLines.Checked);
'VB rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowPageBreaks, chkViewVisiblePageBreaks.Checked) //C# rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowPageBreaks, chkViewVisiblePageBreaks.Checked);
'VB rgrid.SetSettings(WorkbookSettings.View_ShowHorScroll, chkViewVisibleHorizScrollbar.Checked) //C# rgrid.SetSettings(WorkbookSettings.View_ShowHorScroll, chkViewVisibleHorizScrollbar.Checked);
'VB rgrid.SetSettings(WorkbookSettings.View_ShowVerScroll, chkViewVisibleVertScrollbar.Checked) //C# rgrid.SetSettings(WorkbookSettings.View_ShowVerScroll, chkViewVisibleVertScrollbar.Checked);
'VB rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowRowHeader, chkViewVisibleRowHeader.Checked) //C# rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowRowHeader, chkViewVisibleRowHeader.Checked);
'VB rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowColumnHeader, chkViewVisibleColumnHeader.Checked) //C# rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_ShowColumnHeader, chkViewVisibleColumnHeader.Checked);
'VB rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowRowOutlines, chkViewVisibleEnableRowOutlinePanel.Checked) //C# rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowRowOutlines, chkViewVisibleEnableRowOutlinePanel.Checked);
'VB rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowColumnOutlines, chkViewVisibleEnableColumnOutlinePanel.Checked) //C# rgrid.CurrentWorksheet.SetSettings(WorksheetSettings.View_AllowShowColumnOutlines, chkViewVisibleEnableColumnOutlinePanel.Checked)
'VB Dim intRows As Integer = rgrid.CurrentWorksheet.RowCount Dim intCols As Integer = rgrid.CurrentWorksheet.ColumnCount intRows = Val(InputBox("Укажите число строк", "Новое число строк", intRows.ToString).Trim) intCols = Val(InputBox("Укажите число столбцов", "Новое число столбцов", intCols.ToString).Trim) rgrid.CurrentWorksheet.Resize(intRows, intCols) //C# int intRows = rgrid.CurrentWorksheet.RowCount; int intCols = rgrid.CurrentWorksheet.ColumnCount; intRows = Conversion.Val(Interaction.InputBox("Укажите число строк", "Новое число строк", intRows.ToString).Trim); intCols = Conversion.Val(Interaction.InputBox("Укажите число столбцов", "Новое число столбцов", intCols.ToString).Trim); rgrid.CurrentWorksheet.Resize(intRows, intCols);
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.FontName MyStyleFont.FontName = cboFontName.Text rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.FontName; MyStyleFont.FontName = cboFontName.Text; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.FontSize MyStyleFont.FontSize = Val(cboFontSize.Text) rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.FontSize; MyStyleFont.FontSize = Conversion.Val(cboFontSize.Text); rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
'VB Dim MyStyle As New ReoGridStyleObject MyStyle = rgrid.CurrentWorksheet.GetRangeStyle(rgrid.CurrentWorksheet.SelectionRange) 'Изменяем размер (кегль) шрифта Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.FontSize MyStyleFont.FontSize = MyStyle.FontSize + 1 cboFontSize.Text = MyStyleFont.FontSize rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyle = new ReoGridStyleObject(); MyStyle = rgrid.CurrentWorksheet.GetRangeStyle(rgrid.CurrentWorksheet.SelectionRange); //Изменяем размер (кегль) шрифта ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.FontSize; MyStyleFont.FontSize = MyStyle.FontSize + 1; cboFontSize.Text = MyStyleFont.FontSize; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
'VB Dim MyStyle As New ReoGridStyleObject MyStyle = rgrid.CurrentWorksheet.GetRangeStyle(rgrid.CurrentWorksheet.SelectionRange) 'Изменяем размер (кегль) шрифта Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.FontSize MyStyleFont.FontSize = MyStyle.FontSize - 1 cboFontSize.Text = MyStyleFont.FontSize rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyle = new ReoGridStyleObject(); MyStyle = rgrid.CurrentWorksheet.GetRangeStyle(rgrid.CurrentWorksheet.SelectionRange); //Изменяем размер (кегль) шрифта ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.FontSize; MyStyleFont.FontSize = MyStyle.FontSize - 1; cboFontSize.Text = MyStyleFont.FontSize; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
1.3.1 Красный
'VB 'Изменяем цвет шрифта на красный Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.TextColor MyStyleFont.TextColor = Color.Red rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# //Изменяем цвет шрифта на красный ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.TextColor; MyStyleFont.TextColor = Color.Red; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
1.3.2 Синий
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.TextColor MyStyleFont.TextColor = Color.Blue rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.TextColor; MyStyleFont.TextColor = Color.Blue; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
1.3.3 Чёрный
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.TextColor MyStyleFont.TextColor = Color.Black rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.TextColor; MyStyleFont.TextColor = Color.Black; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.FontStyleBold MyStyleFont.Bold = chkFontBold.Checked rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.FontStyleBold; MyStyleFont.Bold = chkFontBold.Checked; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.FontStyleItalic MyStyleFont.Italic = chkFontItalic.Checked rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.FontStyleItalic; MyStyleFont.Italic = chkFontItalic.Checked; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.FontStyleUnderline MyStyleFont.Underline = chkFontUnderline.Checked rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.FontStyleUnderline; MyStyleFont.Underline = chkFontUnderline.Checked; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.FontStyleStrikethrough MyStyleFont.Strikethrough = chkFontStrike.Checked rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.FontStyleStrikethrough; MyStyleFont.Strikethrough = chkFontStrike.Checked; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
Устанавливаем режим переноса слов ‘WordWrap’: (по умолчанию - без переноса, - no-wrap)
'VB Dim MyStyleWrap As New ReoGridStyleObject MyStyleWrap.Flag = PlainStyleFlag.TextWrap If chkTextWrap.Checked = True Then MyStyleWrap.TextWrapMode = TextWrapMode.WordBreak Else MyStyleWrap.TextWrapMode = TextWrapMode.NoWrap rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleWrap) //C# ReoGridStyleObject MyStyleWrap = new ReoGridStyleObject(); MyStyleWrap.Flag = PlainStyleFlag.TextWrap; 'if (chkTextWrap.Checked == true) MyStyleWrap.TextWrapMode = TextWrapMode.WordBreak; 'Else MyStyleWrap.TextWrapMode = TextWrapMode.NoWrap; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleWrap);
Текст может выравниваться как в горизонтальном, так и в вертикальном направлениях
Для горизонтального выравнивания результат зависит от значения свойства MyStyleFont.HAlign
ReoGridHorAlign.Left - выравнивание по левому краю
ReoGridHorAlign.Center - выравнивание по центру
ReoGridHorAlign.Right - выравнивание по правому краю
ReoGridHorAlign.DistributedIndent - распределённый отступ
2.1.1 Горизонтальное выравнивание по левому краю
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.HorizontalAlign MyStyleFont.HAlign = ReoGridHorAlign.Left 'Меняется только эта строка rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.HorizontalAlign; MyStyleFont.HAlign = ReoGridHorAlign.Left; //Меняется только эта строка rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
2.1.2 Горизонтальное выравнивание по центру
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.HorizontalAlign MyStyleFont.HAlign = ReoGridHorAlign.Center rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.HorizontalAlign; MyStyleFont.HAlign = ReoGridHorAlign.Center; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
2.1.3 Горизонтальное выравнивание по правому краю
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.HorizontalAlign MyStyleFont.HAlign = ReoGridHorAlign.Right rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.HorizontalAlign; MyStyleFont.HAlign = ReoGridHorAlign.Right; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
2.1.4 Горизонтальное выравнивание с распределённым отступом
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.HorizontalAlign MyStyleFont.HAlign = ReoGridHorAlign.DistributedIndent rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.HorizontalAlign; MyStyleFont.HAlign = ReoGridHorAlign.DistributedIndent; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
Для вертикального выравнивания результат зависит от значения свойства MyStyleFont.VAlign
ReoGridVerAlign.Top - выравнивание по верхней стороне
ReoGridVerAlign.Middle - выравнивание по центру
ReoGridVerAlign.Bottom - выравнивание по нижней стороне
2.2.1 Вертикальное выравнивание по верхней стороне
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.VerticalAlign MyStyleFont.VAlign = ReoGridVerAlign.Top 'Меняется только эта строка rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.VerticalAlign; MyStyleFont.VAlign = ReoGridVerAlign.Top; //Меняется только эта строка rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
2.2.2 Вертикальное выравнивание посередине
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.VerticalAlign MyStyleFont.VAlign = ReoGridVerAlign.Middle rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.VerticalAlign; MyStyleFont.VAlign = ReoGridVerAlign.Middle; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
2.2.3 Вертикальное выравнивание по нижней стороне
'VB Dim MyStyleFont As New ReoGridStyleObject MyStyleFont.Flag = PlainStyleFlag.VerticalAlign MyStyleFont.VAlign = ReoGridVerAlign.Bottom rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont) //C# ReoGridStyleObject MyStyleFont = new ReoGridStyleObject(); MyStyleFont.Flag = PlainStyleFlag.VerticalAlign; MyStyleFont.VAlign = ReoGridVerAlign.Bottom; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyleFont);
'VB Dim pos As ReoGridPos = rgrid.CurrentWorksheet.GetFreezePos() //C# ReoGridPos pos = rgrid.CurrentWorksheet.GetFreezePos();
Если позиция имеет значения 0,0, то на данный момент зафиксированные строки или столбцы отсутствуют
'VB Dim isFrozen As Boolean = rgrid.CurrentWorksheet.IsFrozen() //C# 'bool isFrozen = rgrid.CurrentWorksheet.IsFrozen();
Вводим третий аргумент, указывающий точку фиксации (в примере - правый нижний край)
'VB rgrid.CurrentWorksheet.FreezeToCell(5, 5, FreezePosition.RightBottom) //C# rgrid.CurrentWorksheet.FreezeToCell(5, 5, FreezePosition.RightBottom);
Если зафиксированная область больше максимальной области отображения элемента управления, то активная область станет невидимой
'VB rgrid.CurrentWorksheet.FreezeToCell(5, 0) //C# rgrid.CurrentWorksheet.FreezeToCell(5, 0);
'VB rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Left) //C# rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Left);
'VB rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Right) //C# rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Right);
'VB rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Top) //C# rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Top);
'VB rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Bottom) //C# rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.Bottom);
'VB rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftTop) //C# rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftTop);
'VB rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftBottom) //C# rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.LeftBottom);
'VB rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightTop) //C# rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightTop);
'VB rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightBottom) //C# rgrid.CurrentWorksheet.FreezeToCell(1, 1, FreezePosition.RightBottom);
'VB rgrid.CurrentWorksheet.Unfreeze() //C# rgrid.CurrentWorksheet.Unfreeze();
VB: rgrid.SetSettings(unvell.ReoGrid.WorkbookSettings.View_ShowSheetTabControl, chkViewShowWorkSheetTabs.Checked) //C# rgrid.CurrentWorksheet.SetSettings(unvell.ReoGrid.WorksheetSettings.View_ShowHeaders, chkViewShowWorkSheetTabs.Checked);
Немного об особенностях объединения ячеек. Так как Reogrid обычно работает с выделенными диапазонами ячеек, то нужно предусматривать проверку: выбрана одна ячейка или более одной.
'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("Невозможно объединить пересекающиеся диапазоны."); } }
'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! Невозможно изменить фрагмент диапазона ячеек."); }
3.1 Вариант 1. Указанный диапазон
'VB rgrid.CurrentWorksheet.UnmergeRange(New ReoGridRange(0, 0, 10, 10)) //C# rgrid.CurrentWorksheet.UnmergeRange(new ReoGridRange(0, 0, 10, 10));
3.2 Вариант 2. Выделенный диапазон
'VB rgrid.CurrentWorksheet.UnmergeRange(rgrid.CurrentWorksheet.SelectionRange) //C# rgrid.CurrentWorksheet.UnmergeRange(rgrid.CurrentWorksheet.SelectionRange);
Примечание. Метод UnmergeRange находит и разбивает все объединённые ячейки указанного диапазона.
'VB Dim intRow As Integer = 1 Dim intCount As Integer = 3 rgrid.CurrentWorksheet.GroupRows(intRow, intCount) //C# int intRow = 1; int intCount = 3; rgrid.CurrentWorksheet.GroupRows(intRow, intCount);
'VB Dim intCol As Integer = 1 Dim intCount As Integer = 3 rgrid.CurrentWorksheet.GroupColumns(intCol, intCount) //C# int intCol = 1; int intCount = 3; rgrid.CurrentWorksheet.GroupColumns(intCol, intCount);
'VB Dim intRow As Integer = 1 Dim intCount As Integer = 3 rgrid.CurrentWorksheet.UngroupRows(intRow, intCount) //C# int intRow = 1; int intCount = 3; rgrid.CurrentWorksheet.UngroupRows(intRow, intCount);
'VB Dim intCol As Integer = 1 Dim intCount As Integer = 3 rgrid.CurrentWorksheet.UngroupColumns(intCol, intCount) //C# int intCol = 1; int intCount = 3; rgrid.CurrentWorksheet.UngroupColumns(intCol, intCount);
Ячейка таблицы может быть дополнительно представлена активным элементом управления.
1.1 Самый простой вариант
'VB rgrid.CurrentWorksheet(1, 1) = New ButtonCell() rgrid.CurrentWorksheet(1, 1) = "Привет" //C# rgrid.CurrentWorksheet(1, 1) = new ButtonCell(); rgrid.CurrentWorksheet(1, 1) = "Привет";
1.2 Кнопка с обработчиком события нажатия (Click)
'VB 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("Кнопка нажата") //C# ButtonCell btn = new ButtonCell("Привет!"); rgrid.CurrentWorksheet(1, 1) = new object[] {"Кнопка: ",btn}; //btn.Click += btn_Click; /*public void btn_Click(s, e) { Interaction.MsgBox("Кнопка нажата"); }*/
Гиперссылка использует данные ячейки как адрес URL.
2.1 Делаем гиперссылкой выделенный диапазон.
'VB rgrid.CurrentWorksheet(rgrid.CurrentWorksheet.SelectionRange) = New HyperlinkCell("http://www.yandex.ru", False) //C# rgrid.CurrentWorksheet(rgrid.CurrentWorksheet.SelectionRange) = new HyperlinkCell("http://www.yandex.ru", False);
2.2 Настройка всех основных параметров с последующим применением к нужной ячейке.
'VB 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 //C# 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;
Если по щелчку на гиперссылке должен происходить переход, то можно применить приведённый ниже код. Объявление переменной-гиперссылки может потребоваться перенести в область объявления переменной на уровне класса формы
'VB Dim link = New HyperlinkCell("http://www.yandex.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)) //C# 'dynamic link = new HyperlinkCell("http://www.yandex.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)); }*/
Для этой процедуры рекомендуется использовать таблицу без объединённых ячеек ;-) Сам Флажок занимает одну ячейку, поясняющую надпись к нему нужно располагать с другой ячейке:
'VB Dim middleStyle = New ReoGridStyleObject middleStyle.Flag = PlainStyleFlag.Padding middleStyle.Flag = PlainStyleFlag.HorizontalAlign middleStyle.Padding = New Padding(2) middleStyle.HAlign = ReoGridHorAlign.Center Dim grayTextStyle = New ReoGridStyleObject grayTextStyle.Flag = PlainStyleFlag.TextColor grayTextStyle.TextColor = Color.DimGray Dim checkbox As CheckBoxCell = New CheckBoxCell() rgrid.CurrentWorksheet.SetRangeStyle(7, 2, 1, 1, middleStyle) rgrid.CurrentWorksheet.SetRangeStyle(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()) //С# dynamic middleStyle = new ReoGridStyleObject(); middleStyle.Flag = PlainStyleFlag.Padding; middleStyle.Flag = PlainStyleFlag.HorizontalAlign; middleStyle.Padding = new Padding(2); middleStyle.HAlign = ReoGridHorAlign.Center; dynamic grayTextStyle = new ReoGridStyleObject(); grayTextStyle.Flag = PlainStyleFlag.TextColor; grayTextStyle.TextColor = Color.DimGray; CheckBoxCell checkbox = new CheckBoxCell(); rgrid.CurrentWorksheet.SetRangeStyle(7, 2, 1, 1, middleStyle); rgrid.CurrentWorksheet.SetRangeStyle(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()); }*/
Как и флажки, радиокнопки занимают одну ячейку. Назовём ячейку с радиокнопкой радиоячеёкой. После добавления радиоячеек в группу, они начинают работать вместе (может быть выбрана только одна радиокнопка)
'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) = "Банан";
При выборе пункта он обновляет данные в своей ячейке. Получить выбранный пункт можно в обработчике события CellDataChanged:
'VB Dim MyDropdown As New DropdownListCell("Яблоко", "Апельсин", "Банан", "Груша", "Тыква", "Вишня", "Кокос") rgrid.CurrentWorksheet(2, 3) = New Object() {"Список:", MyDropdown} //C# 'var dropdown = new DropdownListCell( "Яблоко","Апельсин","Банан","Груша","Тыква","Вишня","Кокос" ); rgrid.CurrentWorksheet(2, 3) = new object[] {"Список:", MyDropdown};
В ячейку помещается графическое изображение
'VB Dim image As Bitmap = Bitmap.FromFile("D:\myinfo\photo.png") rgrid.CurrentWorksheet(1, 2) = New ImageCell(image) //C# 'Bitmap image = Bitmap.FromFile("D:\\myinfo\\photo.png"); rgrid.CurrentWorksheet(1, 2) = new ImageCell(image);
'VB rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.photo) 'или rgrid.CurrentWorksheet("B3") = New ImageCell(My.Resources.photo) //C# rgrid.CurrentWorksheet(1, 2) = new ImageCell(My.Resources.photo); //или rgrid.CurrentWorksheet("B3") = new ImageCell(My.Resources.photo);
Свойство ImageCell ViewMode позволяет управлять отображением картинки в ячейке:
Создаём ImageCell с указанием параметра отображения
'VB Dim img As Bitmap = Bitmap.FromFile("D:\myinfo\photo.png") Dim imgCell As ImageCell = New ImageCell(img, ImageCellViewMode.Zoom) rgrid.CurrentWorksheet("B3") = imgCell //C# Bitmap img = Bitmap.FromFile("D:\\myinfo\\photo.png"); ImageCell imgCell = new ImageCell(img, ImageCellViewMode.Zoom); rgrid.CurrentWorksheet("B3") = imgCell;
Также можно указать значение напрямую
'VB imgCell.ViewMode = ImageCellViewMode.Clip //C# imgCell.ViewMode == ImageCellViewMode.Clip;
И даже можно задать параметры выравнивания по вертикали и горизонтали:
'VB Dim cell = rgrid.CurrentWorksheet.Cells("F6") cell.Style.HAlign = ReoGridHorAlign.Center cell.Style.VAlign = ReoGridVerAlign.Middle ''Ещё варианты 'rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.PasteHS, ImageCellViewMode.Clip) 'rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.PasteHS, ImageCellViewMode.Stretch) 'rgrid.CurrentWorksheet(1, 2) = New ImageCell(My.Resources.PasteHS, ImageCellViewMode.Zoom) //C# 'dynamic cell = rgrid.CurrentWorksheet.Cells("F6"); 'cell.Style.HAlign = ReoGridHorAlign.Center; 'cell.Style.VAlign = ReoGridVerAlign.Middle; //Ещё варианты //rgrid.CurrentWorksheet(1, 2) = new ImageCell(My.Resources.PasteHS, ImageCellViewMode.Clip); //rgrid.CurrentWorksheet(1, 2) = new ImageCell(My.Resources.PasteHS, ImageCellViewMode.Stretch); //rgrid.CurrentWorksheet(1, 2) = new ImageCell(My.Resources.PasteHS, ImageCellViewMode.Zoom);#End Region #Region "Borders"
Тип линии задаётся перечислением BorderLineStyle и может принимать значения:
Тип границы задаётся перечислением BorderPositions и может принимать значения:
Цвет линии задаётся перечислением Color или другим предусмотреным в .Net способом.
Процедуре передаётся тип линии, затрагиваемые границы и цвет
SetBorders(BorderLineStyle.Solid, BorderPositions.All, Color.Black) SetBorders(BorderLineStyle.Solid, BorderPositions.Outside, Color.Black) SetBorders(BorderLineStyle.BoldSolid, BorderPositions.TopBottom, Color.Black) SetBorders(BorderLineStyle.BoldSolid, BorderPositions.LeftRight, Color.Black) SetBorders(BorderLineStyle.Dashed, BorderPositions.Top, Color.Black) SetBorders(BorderLineStyle.Dashed, BorderPositions.Backslash, Color.Black)
'VB Private Sub SetBorders(ByVal myBorderLineStyle As BorderLineStyle, ByVal myBorderPositions As BorderPositions, ByVal MyColor As Color) Dim MyStyleBorder1 As New BorderStyle MyStyleBorder1.Style = myBorderLineStyle MyStyleBorder1.Color = MyColor rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, myBorderPositions, MyStyleBorder1) End Sub //C# private void SetBorders(BorderLineStyle myBorderLineStyle, BorderPositions myBorderPositions, Color MyColor) { BorderStyle MyStyleBorder1 = new BorderStyle(); MyStyleBorder1.Style = BorderLineStyle.Dashed; MyStyleBorder1.Color = MyColor; rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, myBorderPositions, MyStyleBorder1);}
Для очистки границ достаточно задать для них пустой цвет (Color.Empty) или применить функцию
'VB Dim MyStyleBorder1 As New BorderStyle MyStyleBorder1.Color = Color.Empty rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All, MyStyleBorder1) 'или rgrid.CurrentWorksheet.RemoveRangeBorder(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All) //C# 'BorderStyle MyStyleBorder1 = new BorderStyle(); MyStyleBorder1.Color = Color.Empty; rgrid.CurrentWorksheet.SetRangeBorders(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All, MyStyleBorder1); //или rgrid.CurrentWorksheet.RemoveRangeBorder(rgrid.CurrentWorksheet.SelectionRange, BorderPositions.All);
Фон ячейки может быть как залит определённым цветом, так и текстурой (по шаблону). Ниже приведены примеры настройки границ и заливки фона
'VB Dim MyStyle As New ReoGridStyleObject MyStyle.Flag = PlainStyleFlag.BackColor MyStyle.BackColor = Color.Empty 'Очищаем ячейки rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyle) //C# ReoGridStyleObject MyStyle = new ReoGridStyleObject(); MyStyle.Flag = PlainStyleFlag.BackColor; MyStyle.BackColor = Color.Empty; //Очищаем ячейки rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyle);
'VB Dim MyStyle As New ReoGridStyleObject MyStyle.Flag = PlainStyleFlag.BackColor MyStyle.BackColor = Color.Red rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyle) //C# ReoGridStyleObject MyStyle = new ReoGridStyleObject(); MyStyle.Flag = PlainStyleFlag.BackColor; MyStyle.BackColor = Color.Red; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyle);
'VB Dim MyStyle As New ReoGridStyleObject MyStyle.Flag = PlainStyleFlag.BackColor MyStyle.BackColor = Color.Yellow rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyle) //C# ReoGridStyleObject MyStyle = new ReoGridStyleObject(); MyStyle.Flag = PlainStyleFlag.BackColor; MyStyle.BackColor = Color.Yellow; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStyle);
Фон на основе шаблона
'VB Dim MyStylePattern As New ReoGridStyleObject MyStylePattern.Flag = PlainStyleFlag.FillPattern MyStylePattern.Flag = PlainStyleFlag.BackColor MyStylePattern.BackColor = Color.LightYellow MyStylePattern.FillPatternColor = Color.SkyBlue MyStylePattern.FillPatternStyle = System.Drawing.Drawing2D.HatchStyle.DiagonalBrick rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStylePattern) //C# ReoGridStyleObject MyStylePattern = new ReoGridStyleObject(); MyStylePattern.Flag = PlainStyleFlag.FillPattern; MyStylePattern.Flag = PlainStyleFlag.BackColor; MyStylePattern.BackColor = Color.LightYellow; MyStylePattern.FillPatternColor = Color.SkyBlue; MyStylePattern.FillPatternStyle = System.Drawing.Drawing2D.HatchStyle.DiagonalBrick; rgrid.CurrentWorksheet.SetRangeStyle(rgrid.CurrentWorksheet.SelectionRange, MyStylePattern);
Масштабирование может производиться как с помощью вращения колёсика мыши при зажатой клавише CTRL, так и программно
'VB rgrid.CurrentWorksheet.ScaleFactor = Convert.ToSingle(Val(cboZoom.Text.Replace("%", String.Empty).Trim)) / 100.0F //C# rgrid.CurrentWorksheet.ScaleFactor == Convert.ToSingle(Conversion.Val(cboZoom.Text.Replace("%", string.Empty).Trim)) / 100.0f;
'VB rgrid.CurrentWorksheet.ZoomIn() //C# rgrid.CurrentWorksheet.ZoomIn();
'VB rgrid.CurrentWorksheet.ZoomOut() //C# rgrid.CurrentWorksheet.ZoomOut();
'VB rgrid.CurrentWorksheet.ZoomReset() //C# rgrid.CurrentWorksheet.ZoomReset();
'VB rgrid.CurrentWorksheet.SetScale(2.0F) //C# rgrid.CurrentWorksheet.SetScale(2.0F);
Этот код необходим для настройки пользовательского интерфейса при выборе пользователем другой ячейки или диапазона. Данный код, для версии 0.88, работает в обработчике события SelectionRangeChanged компонента Reogrid
'VB If e.Range.IsEmpty = True Then MsgBox("Выбран пустой диапазон") : Exit Sub 'Ничего не выбрано - можно не продолжать lblStatus.Text = "Выделенный диапазон: " & rgrid.CurrentWorksheet.SelectionRange.ToString() Dim MyStyle As New ReoGridStyleObject 'Создаём экземпляр стиля MyStyle = rgrid.CurrentWorksheet.GetRangeStyle(rgrid.CurrentWorksheet.SelectionRange) cboFontName.Text = MyStyle.FontName 'Гарнитура шрифта cboFontSize.Text = 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 = 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){Interaction.MsgBox("Выбран пустой диапазон");return; } //Ничего не выбрано - можно не продолжать 'lblStatus.Text = "Выделенный диапазон: " + rgrid.CurrentWorksheet.SelectionRange.ToString(); ReoGridStyleObject MyStyle = new ReoGridStyleObject(); //Создаём экземпляр стиля MyStyle = rgrid.CurrentWorksheet.GetRangeStyle(rgrid.CurrentWorksheet.SelectionRange); 'cboFontName.Text = MyStyle.FontName; //Гарнитура шрифта 'cboFontSize.Text = 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 = 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; }
1. Переносим выбранную функцию из списка в текстовое поле формулы. 'Для этого используем обработчик события SelectedIndexChanged для 'раскрывающегося списка cboFunctions
'VB 'txtFormula.Text &= cboFunctions.Text //C# 'txtFormula.Text += cboFunctions.Text;
2. Переносим формулу в выбранную ячейку. Используется обработчик события KeyDown для текстового поля форулы txtFormula
'VB 'if e.KeyCode = Keys.Enter Then ' rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).Formula = txtFormula.Text ''txtFormula.SelectAll() End If //C# 'if (e.KeyCode == Keys.Enter) { ' rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).Formula = txtFormula.Text; //txtFormula.SelectAll() }
3. Получение информации из выбранной пользователем ячейки. Для этого используется обработчик события 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 (Strings.Len(strFormula) >= 0) { 'txtFormula.Text = strFormula; 'cboFunctions.Text = rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).DisplayText; } }
4. Вариант обработки раскрывающегося списка функций, одновременно отображающего текущее содержимое ячейки (событие cboFunctions_SelectedIndexChanged)
'VB txtFormula.Text &= cboFunctions.Text //C# 'txtFormula.Text += cboFunctions.Text;
5. Изменение формулы по в текстовом поле (обработка события txtFormula_KeyDown)
'VB Try If e.KeyCode = Keys.Enter Then rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).Formula = txtFormula.Text End If Catch End Try //C# 'try { 'if (e.KeyCode == Keys.Enter) { rgrid.CurrentWorksheet.Cells(rgrid.CurrentWorksheet.FocusPos).Formula = txtFormula.Text; } } catch {}
Данный код можно поместить в обработчики событий Click кнопок.
'VB 'Выжимаем максимум! / MaximumGridForm 'Меняем размер и получаем 1048576 строк и 32768 столбцов rgrid.CurrentWorksheet.Resize(1048576, 32768) rgrid.CurrentWorksheet.MergeRange(1, 1, 1, 6) rgrid.CurrentWorksheet(1, 1) = "Предельное количество ячеек (1048576 x 32768)" rgrid.CurrentWorksheet.MergeRange(3, 1, 2, 6) rgrid.CurrentWorksheet(3, 1) = "Вы можете побаловаться прокруткой, поиграть с масштабом, отредактировать любую ячейку или изменить её размер." //C# //Выжимаем максимум! / MaximumGridForm '{ rgrid.CurrentWorksheet.Resize(1048576, 32768); //Меняем размер и получаем 1048576 строк и 32768 столбцов rgrid.CurrentWorksheet.MergeRange(1, 1, 1, 6); rgrid.CurrentWorksheet(1, 1) = "Предельное количество ячеек (1048576 x 32768)"; rgrid.CurrentWorksheet.MergeRange(3, 1, 2, 6); rgrid.CurrentWorksheet(3, 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.WidthInPixel = 30 'Ширина заголовка: 30 пикселей checkBoxHeader.Style.HorizontalAlign = ReoGridHorAlign.Center checkBoxHeader.Style.Padding = New Padding(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 = ReoGridSelectionMode.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) //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 Padding(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 = ReoGridSelectionMode.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[ + 1, + 1] { '{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); }*/
Многие события, происходящие перед основными, поддерживают свойство IsCancelled. Если его установить в True, Reogrid отменит соответствующую операцию. Обычно используется для предотвращения правки ячеек или операций сворачивания/разворачивания
'VB 'Пример: текст можно править лишь в чётко определённом диапазоне: Dim editableRange = New ReoGridRange(3, 1, 2, 3) rgrid.CurrentWorksheet.SetRangeBorders(editableRange, BorderPositions.Outside, BorderStyle.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()) //C# //Пример: текст можно править лишь в чётко определённом диапазоне: '{ 'dynamic editableRange = new ReoGridRange(3, 1, 2, 3); rgrid.CurrentWorksheet.SetRangeBorders(editableRange, BorderPositions.Outside, BorderStyle.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()); }*/