лаба 2, формочка осталась
This commit is contained in:
parent
6639c7be4d
commit
e9ccb205f5
@ -7,4 +7,13 @@
|
|||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Remove="C:\Users\annap\.nuget\packages\pdfsharp.standard\1.51.15\contentFiles\any\netstandard2.0\SharpZipLib\ReadMe.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="PdfSharp.MigraDoc.Standard" Version="1.51.15" />
|
||||||
|
<PackageReference Include="PDFSharp.Standard" Version="1.51.15" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
36
COP_5/COP_5/PdfForDiagram.Designer.cs
generated
Normal file
36
COP_5/COP_5/PdfForDiagram.Designer.cs
generated
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
namespace COP_5
|
||||||
|
{
|
||||||
|
partial class PdfForDiagram
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Обязательная переменная конструктора.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Освободить все используемые ресурсы.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Код, автоматически созданный конструктором компонентов
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Требуемый метод для поддержки конструктора — не изменяйте
|
||||||
|
/// содержимое этого метода с помощью редактора кода.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
components = new System.ComponentModel.Container();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
111
COP_5/COP_5/PdfForDiagram.cs
Normal file
111
COP_5/COP_5/PdfForDiagram.cs
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
using MigraDoc.DocumentObjectModel;
|
||||||
|
using MigraDoc.DocumentObjectModel.Shapes;
|
||||||
|
using MigraDoc.Rendering;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using MigraDoc.DocumentObjectModel.Shapes.Charts;
|
||||||
|
using COP_5.PdfHelper;
|
||||||
|
|
||||||
|
namespace COP_5
|
||||||
|
{
|
||||||
|
public partial class PdfForDiagram : Component
|
||||||
|
{
|
||||||
|
public PdfForDiagram()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PdfForDiagram(IContainer container)
|
||||||
|
{
|
||||||
|
container.Add(this);
|
||||||
|
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Document _document;
|
||||||
|
private Chart _chart;
|
||||||
|
|
||||||
|
private Document Document
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_document == null)
|
||||||
|
{
|
||||||
|
_document = new Document();
|
||||||
|
}
|
||||||
|
return _document;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreateHeader(string header)
|
||||||
|
{
|
||||||
|
var section = Document.AddSection();
|
||||||
|
var paragraph = section.AddParagraph(header);
|
||||||
|
paragraph.Format.Font.Color = Colors.Black;
|
||||||
|
paragraph.Format.Font.Bold = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ConfigChart(DiagramPdfInfo info)
|
||||||
|
{
|
||||||
|
((Shape)_chart).Width = Unit.FromCentimeter(16.0);
|
||||||
|
((Shape)_chart).Height = Unit.FromCentimeter(12.0);
|
||||||
|
_chart.TopArea.AddParagraph(info.ChartTitle);
|
||||||
|
_chart.XAxis.MajorTickMark = (TickMarkType)2;
|
||||||
|
_chart.YAxis.MajorTickMark = (TickMarkType)2;
|
||||||
|
_chart.YAxis.HasMajorGridlines = true;
|
||||||
|
_chart.PlotArea.LineFormat.Width = new Unit(1);
|
||||||
|
_chart.PlotArea.LineFormat.Visible = true;
|
||||||
|
switch (info.LegendLocation)
|
||||||
|
{
|
||||||
|
case PdfParagraphAlignmentType.Left:
|
||||||
|
_chart.LeftArea.AddLegend();
|
||||||
|
break;
|
||||||
|
case PdfParagraphAlignmentType.Right:
|
||||||
|
_chart.RightArea.AddLegend();
|
||||||
|
break;
|
||||||
|
case PdfParagraphAlignmentType.Top:
|
||||||
|
_chart.TopArea.AddLegend();
|
||||||
|
break;
|
||||||
|
case PdfParagraphAlignmentType.Bottom:
|
||||||
|
_chart.BottomArea.AddLegend();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreatePieChart(DiagramPdfInfo info)
|
||||||
|
{
|
||||||
|
_chart = new Chart(ChartType.Pie2D);
|
||||||
|
foreach (var kvp in info.Data)
|
||||||
|
{
|
||||||
|
Series series = _chart.SeriesCollection.AddSeries();
|
||||||
|
series.Name = kvp.Key;
|
||||||
|
series.Add(kvp.Value.Select(x => x.Value).ToArray()); // Используем Value для данных
|
||||||
|
}
|
||||||
|
_chart.XValues.AddXSeries().Add(info.Data.First().Value.Select(x => x.Name).ToArray()); // Используем Date для оси X
|
||||||
|
ConfigChart(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveDoc(string filepath)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(filepath))
|
||||||
|
throw new ArgumentNullException(nameof(filepath), "File path cannot be null or empty.");
|
||||||
|
if (_document == null)
|
||||||
|
throw new ArgumentNullException(nameof(_document), "Document is not created.");
|
||||||
|
if (_chart != null)
|
||||||
|
_document.LastSection.Add(_chart);
|
||||||
|
PdfDocumentRenderer documentRenderer = new PdfDocumentRenderer(true)
|
||||||
|
{
|
||||||
|
Document = _document
|
||||||
|
};
|
||||||
|
documentRenderer.RenderDocument();
|
||||||
|
documentRenderer.PdfDocument.Save(filepath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreateDoc(DiagramPdfInfo info)
|
||||||
|
{
|
||||||
|
info.CheckFields();
|
||||||
|
CreateHeader(info.Header);
|
||||||
|
CreatePieChart(info);
|
||||||
|
SaveDoc(info.FilePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
COP_5/COP_5/PdfForImages.Designer.cs
generated
Normal file
36
COP_5/COP_5/PdfForImages.Designer.cs
generated
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
namespace COP_5
|
||||||
|
{
|
||||||
|
partial class PdfForImages
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Обязательная переменная конструктора.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Освободить все используемые ресурсы.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Код, автоматически созданный конструктором компонентов
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Требуемый метод для поддержки конструктора — не изменяйте
|
||||||
|
/// содержимое этого метода с помощью редактора кода.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
components = new System.ComponentModel.Container();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
127
COP_5/COP_5/PdfForImages.cs
Normal file
127
COP_5/COP_5/PdfForImages.cs
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
using System.ComponentModel;
|
||||||
|
using MigraDoc.DocumentObjectModel;
|
||||||
|
using MigraDoc.Rendering;
|
||||||
|
using COP_5.PdfHelper;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace COP_5
|
||||||
|
{
|
||||||
|
public partial class PdfForImages : Component
|
||||||
|
{
|
||||||
|
private Document _document = null;
|
||||||
|
|
||||||
|
private Section _section = null;
|
||||||
|
|
||||||
|
private List<byte[]> _images = null;
|
||||||
|
|
||||||
|
private Document Document
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_document == null)
|
||||||
|
{
|
||||||
|
_document = new Document();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _document;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Section Section
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_section == null)
|
||||||
|
{
|
||||||
|
_section = Document.AddSection();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _section;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<byte[]> Images
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (_images == null)
|
||||||
|
{
|
||||||
|
_images = new List<byte[]>();
|
||||||
|
}
|
||||||
|
|
||||||
|
return _images;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public PdfForImages()
|
||||||
|
{
|
||||||
|
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public PdfForImages(IContainer container)
|
||||||
|
{
|
||||||
|
container.Add(this);
|
||||||
|
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
public void CreatePdf(ImagePdfInfo info)
|
||||||
|
{
|
||||||
|
info.CheckFields();
|
||||||
|
CreateHeader(info.Header);
|
||||||
|
foreach (var image in info.Images)
|
||||||
|
{
|
||||||
|
CreateImage(image);
|
||||||
|
}
|
||||||
|
|
||||||
|
SavePdf(info.FilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreateHeader(string header)
|
||||||
|
{
|
||||||
|
var paragraph = Section.AddParagraph(header);
|
||||||
|
paragraph.Format.Font.Name = "Arial";
|
||||||
|
paragraph.Format.Font.Bold = true;
|
||||||
|
paragraph.Format.Font.Size = 20;
|
||||||
|
paragraph.Format.SpaceAfter = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SavePdf(string filepath)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(filepath))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Имя файла не задано");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_document == null || _section == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Документ не сформирован, сохранять нечего");
|
||||||
|
}
|
||||||
|
|
||||||
|
var pdfRenderer = new PdfDocumentRenderer(true)
|
||||||
|
{
|
||||||
|
Document = _document,
|
||||||
|
};
|
||||||
|
pdfRenderer.RenderDocument();
|
||||||
|
pdfRenderer.Save(filepath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void CreateImage(byte[] image)
|
||||||
|
{
|
||||||
|
if (image == null || image.Length == 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("Картинка не загружена");
|
||||||
|
}
|
||||||
|
|
||||||
|
Images.Add(image);
|
||||||
|
|
||||||
|
var imageFileName = Path.GetTempFileName();
|
||||||
|
File.WriteAllBytes(imageFileName, image);
|
||||||
|
|
||||||
|
var img = Section.AddImage(imageFileName);
|
||||||
|
img.Width = Unit.FromCentimeter(15); // Можно настроить ширину изображения
|
||||||
|
img.LockAspectRatio = true;
|
||||||
|
Section.AddParagraph();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
COP_5/COP_5/PdfForTables.Designer.cs
generated
Normal file
36
COP_5/COP_5/PdfForTables.Designer.cs
generated
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
namespace COP_5
|
||||||
|
{
|
||||||
|
partial class PdfForTables
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Обязательная переменная конструктора.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Освободить все используемые ресурсы.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Код, автоматически созданный конструктором компонентов
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Требуемый метод для поддержки конструктора — не изменяйте
|
||||||
|
/// содержимое этого метода с помощью редактора кода.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
components = new System.ComponentModel.Container();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
104
COP_5/COP_5/PdfForTables.cs
Normal file
104
COP_5/COP_5/PdfForTables.cs
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
using System.ComponentModel;
|
||||||
|
using MigraDoc.DocumentObjectModel;
|
||||||
|
using MigraDoc.DocumentObjectModel.Tables;
|
||||||
|
using MigraDoc.Rendering;
|
||||||
|
using System.Reflection;
|
||||||
|
using COP_5.PdfHelper;
|
||||||
|
|
||||||
|
namespace COP_5
|
||||||
|
{
|
||||||
|
public partial class PdfForTables : Component
|
||||||
|
{
|
||||||
|
public void CreatePdf<T>(TablePdfInfo<T> info)
|
||||||
|
{
|
||||||
|
info.CheckFields();
|
||||||
|
|
||||||
|
// Создание документа
|
||||||
|
var document = new Document();
|
||||||
|
var section = document.AddSection();
|
||||||
|
|
||||||
|
// Установка заголовка
|
||||||
|
var titleParagraph = section.AddParagraph(info.Title);
|
||||||
|
titleParagraph.Format.Alignment = ParagraphAlignment.Center;
|
||||||
|
titleParagraph.Format.Font.Size = 16;
|
||||||
|
titleParagraph.Format.Font.Bold = true;
|
||||||
|
titleParagraph.Format.SpaceAfter = 20;
|
||||||
|
|
||||||
|
// Создание таблицы
|
||||||
|
var table = section.AddTable();
|
||||||
|
table.Borders.Width = 0.75;
|
||||||
|
|
||||||
|
// Создание столбцов
|
||||||
|
for (int i = 0; i < info.Data.Count + 2; i++)
|
||||||
|
{
|
||||||
|
var column = table.AddColumn(Unit.FromCentimeter(3)); // Ширину можно настроить
|
||||||
|
column.Format.Alignment = ParagraphAlignment.Center;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Создание заголовков
|
||||||
|
for (int rowIndex = 0; rowIndex < info.PropertiesPerRow.Count; rowIndex++)
|
||||||
|
{
|
||||||
|
var row = table.AddRow();
|
||||||
|
row.Height = Unit.FromCentimeter(info.RowHeights[rowIndex]); // Высота строки
|
||||||
|
|
||||||
|
foreach (Cell cell in row.Cells)
|
||||||
|
{
|
||||||
|
cell.VerticalAlignment = VerticalAlignment.Center;
|
||||||
|
cell.Format.Alignment = ParagraphAlignment.Center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int rowNum = 0;
|
||||||
|
foreach (var kvp in info.Headers)
|
||||||
|
{
|
||||||
|
string key = kvp.Key;
|
||||||
|
List<string> values = kvp.Value;
|
||||||
|
|
||||||
|
if (values.Count == 0)
|
||||||
|
{
|
||||||
|
table.Rows[rowNum].Cells[0].AddParagraph(key);
|
||||||
|
table.Rows[rowNum].Cells[0].MergeRight = 1;
|
||||||
|
rowNum++;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
table.Rows[rowNum].Cells[0].AddParagraph(key);
|
||||||
|
table.Rows[rowNum].Cells[0].MergeDown = values.Count - 1;
|
||||||
|
|
||||||
|
foreach (var value in values)
|
||||||
|
{
|
||||||
|
table.Rows[rowNum].Cells[1].AddParagraph(value);
|
||||||
|
rowNum++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (int colIndex = 0; colIndex < info.Data.Count; colIndex++)
|
||||||
|
{
|
||||||
|
for (int rowIndex = 0; rowIndex < info.PropertiesPerRow.Count; rowIndex++)
|
||||||
|
{
|
||||||
|
Type type = typeof(T);
|
||||||
|
PropertyInfo property = type.GetProperty(info.PropertiesPerRow[rowIndex]);
|
||||||
|
|
||||||
|
if (property == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentException($"Property with name {info.PropertiesPerRow[rowIndex]} doesn't exist in class {type.Name}");
|
||||||
|
}
|
||||||
|
|
||||||
|
table.Rows[rowIndex].Cells[colIndex + 2].AddParagraph(property.GetValue(info.Data[colIndex]).ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Рендеринг документа в PDF
|
||||||
|
var pdfRenderer = new PdfDocumentRenderer(true)
|
||||||
|
{
|
||||||
|
Document = document
|
||||||
|
};
|
||||||
|
pdfRenderer.RenderDocument();
|
||||||
|
pdfRenderer.PdfDocument.Save(info.FileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
COP_5/COP_5/PdfHelper/DiagramPdfInfo.cs
Normal file
21
COP_5/COP_5/PdfHelper/DiagramPdfInfo.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
namespace COP_5.PdfHelper
|
||||||
|
{
|
||||||
|
public class DiagramPdfInfo
|
||||||
|
{
|
||||||
|
public string FilePath { get; set; }
|
||||||
|
public string Header { get; set; }
|
||||||
|
public string ChartTitle { get; set; }
|
||||||
|
public PdfParagraphAlignmentType LegendLocation { get; set; }
|
||||||
|
public Dictionary<string, List<(string Name, double Value)>> Data { get; set; }
|
||||||
|
|
||||||
|
public void CheckFields()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(FilePath))
|
||||||
|
throw new ArgumentNullException(nameof(FilePath), "Путь к файлу не может быть null или пустым.");
|
||||||
|
if (string.IsNullOrEmpty(Header))
|
||||||
|
throw new ArgumentNullException(nameof(Header), "Заголовок не может быть null или пустым.");
|
||||||
|
if (Data == null || !Data.Any())
|
||||||
|
throw new ArgumentNullException(nameof(Data), "Данные не могут быть null или пустыми.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
17
COP_5/COP_5/PdfHelper/ImagePdfInfo.cs
Normal file
17
COP_5/COP_5/PdfHelper/ImagePdfInfo.cs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
namespace COP_5.PdfHelper
|
||||||
|
{
|
||||||
|
public class ImagePdfInfo
|
||||||
|
{
|
||||||
|
public string FilePath { get; set; }
|
||||||
|
public string Header { get; set; }
|
||||||
|
public List<byte[]> Images { get; set; }
|
||||||
|
|
||||||
|
public void CheckFields()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(FilePath) || string.IsNullOrWhiteSpace(Header) || Images == null || Images.Count == 0)
|
||||||
|
{
|
||||||
|
throw new ArgumentException("Все поля должны быть заполнены.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
10
COP_5/COP_5/PdfHelper/PdfParagraphAlignmentType.cs
Normal file
10
COP_5/COP_5/PdfHelper/PdfParagraphAlignmentType.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
namespace COP_5.PdfHelper
|
||||||
|
{
|
||||||
|
public enum PdfParagraphAlignmentType
|
||||||
|
{
|
||||||
|
Left,
|
||||||
|
Right,
|
||||||
|
Top,
|
||||||
|
Bottom
|
||||||
|
}
|
||||||
|
}
|
38
COP_5/COP_5/PdfHelper/TablePdfInfo.cs
Normal file
38
COP_5/COP_5/PdfHelper/TablePdfInfo.cs
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
namespace COP_5.PdfHelper
|
||||||
|
{
|
||||||
|
public class TablePdfInfo<T>
|
||||||
|
{
|
||||||
|
public string FileName { get; set; }
|
||||||
|
public string Title { get; set; }
|
||||||
|
public List<double> RowHeights { get; set; }
|
||||||
|
public Dictionary<string, List<string>> Headers { get; set; }
|
||||||
|
public List<string> PropertiesPerRow { get; set; }
|
||||||
|
public List<T> Data { get; set; }
|
||||||
|
public void CheckFields()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(FileName))
|
||||||
|
throw new ArgumentException("Имя файла не может быть пустым.", nameof(FileName));
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(Title))
|
||||||
|
throw new ArgumentException("Название документа не может быть пустым.", nameof(DocumentTitle));
|
||||||
|
|
||||||
|
if (Headers == null || Headers.Count == 0)
|
||||||
|
throw new ArgumentException("Заголовки для шапки не могут быть пустыми.", nameof(Headers));
|
||||||
|
|
||||||
|
if (Data == null || Data.Count == 0)
|
||||||
|
throw new ArgumentException("Данные для таблицы не могут быть пустыми.", nameof(Data));
|
||||||
|
|
||||||
|
if (RowHeights == null || RowHeights.Count == 0)
|
||||||
|
throw new ArgumentException("Высоты строк не могут быть пустыми.", nameof(RowHeights));
|
||||||
|
|
||||||
|
if (PropertiesPerRow.Any(string.IsNullOrWhiteSpace))
|
||||||
|
throw new ArgumentException("Список названий свойств не может содержать пустые строки.", nameof(PropertiesPerRow));
|
||||||
|
|
||||||
|
if (RowHeights.Count != PropertiesPerRow.Count)
|
||||||
|
throw new ArgumentException("Количество высот строк должно соответствовать количеству названий свойств.", nameof(RowHeights));
|
||||||
|
|
||||||
|
if (Data.Count != PropertiesPerRow.Count)
|
||||||
|
throw new ArgumentException("Количество данных должно соответствовать количеству названий свойств.", nameof(Data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
COP_5/COP_5/TestClasses/Human.cs
Normal file
16
COP_5/COP_5/TestClasses/Human.cs
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
namespace COP_5.TestClasses
|
||||||
|
{
|
||||||
|
public class Human
|
||||||
|
{
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Surname { get; set; }
|
||||||
|
public int Age { get; set; }
|
||||||
|
public Human() { }
|
||||||
|
public Human(string name, string surname, int age)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
Surname = surname;
|
||||||
|
Age = age;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user