KOP-PIbd-32-Katysheva-N-E/ComponentsLibrary/ComponentTable.cs
2024-10-15 10:27:49 +03:00

112 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System.ComponentModel;
namespace ComponentsLibrary
{
public partial class ComponentTable : Component
{
public ComponentTable()
{
InitializeComponent();
}
public ComponentTable(IContainer container)
{
container.Add(this);
InitializeComponent();
}
/*
public void CreateDocument(string filePath, DocumentTable<T> documentTable)
{
ValidateInput(documentTable);
using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(filePath, DocumentFormat.OpenXml.WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
mainPart.Document = new Document();
Body body = new Body();
// Добавление заголовка
Paragraph titleParagraph = new Paragraph(new Run(new Text(documentTable.DocumentTitle)));
body.Append(titleParagraph);
// Создание таблицы
Table table = new Table();
CreateHeaderRows(documentTable, table);
FillTableData(documentTable, table);
body.Append(table);
mainPart.Document.Append(body);
mainPart.Document.Save();
}
}
private void ValidateInput(DocumentTable<T> documentTable)
{
// Проводим проверки на заполненность и соответствие
if (string.IsNullOrEmpty(documentTable.DocumentTitle))
throw new ArgumentException("Заголовок документа не может быть пустым.");
if (documentTable.Headers == null || documentTable.Headers.Count == 0 || documentTable.PropertyMappings == null || documentTable.PropertyMappings.Count == 0)
throw new ArgumentException("Заголовки и отображения свойств должны быть заполнены.");
if (documentTable.Data == null || !documentTable.Data.Any())
throw new ArgumentException("Данные таблицы не могут быть пустыми.");
// Проверка на некорректные столбцы объединения
foreach (var column in documentTable.MergedColumns)
{
if (column < 0 || column >= documentTable.Headers.Count)
throw new ArgumentOutOfRangeException($"Неверный номер объединяемого столбца: {column}");
}
// Проверка, что все заголовки заполнены
foreach (var header in documentTable.Headers)
{
if (string.IsNullOrEmpty(header))
throw new ArgumentException("Все заголовки должны быть заполнены.");
}
}
private void CreateHeaderRows(DocumentTable<T> documentTable, Table table)
{
// Создаем две строки заголовков
for (int rowIndex = 0; rowIndex < 2; rowIndex++)
{
TableRow headerRow = new TableRow();
for (int colIndex = 0; colIndex < documentTable.Headers.Count; colIndex++)
{
TableCell cell = new TableCell(new Paragraph(new Run(new Text(documentTable.Headers[colIndex]))));
if (!documentTable.MergedColumns.Contains(colIndex))
{
// Объединяем ячейку по строкам
cell.VerticalMerge = new TableCellVerticalMerge();
}
headerRow.Append(cell);
}
table.Append(headerRow);
}
}
private void FillTableData(DocumentTable<T> documentTable, Table table)
{
// Заполнение данных таблицы
foreach (var item in documentTable.Data)
{
TableRow dataRow = new TableRow();
for (int colIndex = 0; colIndex < documentTable.PropertyMappings.Count; colIndex++)
{
var propertyValue = typeof(T).GetProperty(documentTable.PropertyMappings[colIndex])?.GetValue(item, null);
TableCell cell = new TableCell(new Paragraph(new Run(new Text(propertyValue?.ToString() ?? string.Empty))));
dataRow.Append(cell);
}
table.Append(dataRow);
}
}*/
}
}