Изменения во втором компоненте

This commit is contained in:
Илья 2024-09-23 23:27:20 +04:00
parent 5177f3c8e1
commit d990fdb00f
4 changed files with 89 additions and 91 deletions

View File

@ -2,7 +2,9 @@
{ {
public class ColumnParameters public class ColumnParameters
{ {
public string Header { get; set; } = string.Empty; public string FirstRowHeader { get; set; } = string.Empty;
public string SecondRowHeader { get; set; } = string.Empty;
public string PropertyName { get; set; } = string.Empty; public string PropertyName { get; set; } = string.Empty;

View File

@ -6,9 +6,7 @@
public string Title { get; set; } = string.Empty; public string Title { get; set; } = string.Empty;
public List<ColumnParameters> FirstRowColumnParameters { get; set; } = new(); public List<ColumnParameters> ColumnParameters { get; set; } = new();
public List<ColumnParameters> SecondRowColumnParameters { get; set; } = new();
public List<T> Items { get; set; } = new(); public List<T> Items { get; set; } = new();

View File

@ -50,7 +50,7 @@ namespace RodionovLibrary.NonVisualComponents
Table table = new(); Table table = new();
double totalWidthTwips = tableInfo.FirstRowColumnParameters.Sum(column => column.Width) * 566.93; double totalWidthTwips = tableInfo.ColumnParameters.Sum(column => column.Width) * 566.93;
TableProperties tableProperties = new( TableProperties tableProperties = new(
new TableBorders( new TableBorders(
new TopBorder { Val = BorderValues.Single, Size = 8 }, new TopBorder { Val = BorderValues.Single, Size = 8 },
@ -65,12 +65,12 @@ namespace RodionovLibrary.NonVisualComponents
); );
table.AppendChild(tableProperties); table.AppendChild(tableProperties);
AddTableHeaderRow(table, tableInfo.FirstRowColumnParameters); AddTableHeaderRow(table, tableInfo.ColumnParameters, true);
AddTableHeaderRow(table, tableInfo.SecondRowColumnParameters); AddTableHeaderRow(table, tableInfo.ColumnParameters, false);
MergeColumns(table, tableInfo.MergedColumns); MergeColumns(table, tableInfo.MergedColumns);
AddTableData(table, tableInfo.Items, tableInfo.SecondRowColumnParameters); AddTableData(table, tableInfo.Items, tableInfo.ColumnParameters);
body.Append(table); body.Append(table);
@ -85,15 +85,14 @@ namespace RodionovLibrary.NonVisualComponents
throw new ArgumentException("Не все данные заполнены"); throw new ArgumentException("Не все данные заполнены");
} }
CheckColumnParameters(tableInfo.FirstRowColumnParameters, false); CheckColumnParameters(tableInfo.ColumnParameters);
CheckColumnParameters(tableInfo.SecondRowColumnParameters, true);
if (tableInfo.Items == null || tableInfo.Items.Count == 0) if (tableInfo.Items == null || tableInfo.Items.Count == 0)
{ {
throw new ArgumentException("Данные для основной части таблицы не заданы"); throw new ArgumentException("Данные для основной части таблицы не заданы");
} }
foreach (var column in tableInfo.SecondRowColumnParameters) foreach (var column in tableInfo.ColumnParameters)
{ {
if (typeof(T).GetProperty(column.PropertyName) == null) if (typeof(T).GetProperty(column.PropertyName) == null)
{ {
@ -101,10 +100,10 @@ namespace RodionovLibrary.NonVisualComponents
} }
} }
ValidateMergedColumns(tableInfo.MergedColumns, tableInfo.FirstRowColumnParameters.Count); ValidateMergedColumns(tableInfo.MergedColumns, tableInfo.ColumnParameters.Count);
} }
private void CheckColumnParameters(List<ColumnParameters> columnParameters, bool isSecondRow) private void CheckColumnParameters(List<ColumnParameters> columnParameters)
{ {
if (columnParameters == null || columnParameters.Count == 0) if (columnParameters == null || columnParameters.Count == 0)
{ {
@ -113,17 +112,17 @@ namespace RodionovLibrary.NonVisualComponents
foreach (var column in columnParameters) foreach (var column in columnParameters)
{ {
if (string.IsNullOrEmpty(column.Header)) if (string.IsNullOrEmpty(column.FirstRowHeader) && string.IsNullOrEmpty(column.SecondRowHeader))
{ {
throw new ArgumentException("Заголовок не задан для одной из колонок в таблице"); throw new ArgumentException("Заголовок не задан для одной из колонок в таблице");
} }
if (column.Width <= 0) if (column.Width <= 0)
{ {
throw new ArgumentException($"У колонки с заголовком {column.Header} ширина должна быть больше нуля."); throw new ArgumentException($"У колонки ширина должна быть больше нуля.");
} }
if (isSecondRow && string.IsNullOrEmpty(column.PropertyName)) if (string.IsNullOrEmpty(column.PropertyName))
{ {
throw new ArgumentException($"Свойство не задано для заголовка: {column.Header}."); throw new ArgumentException($"Свойство не задано для одной из колонок");
} }
} }
} }
@ -153,12 +152,13 @@ namespace RodionovLibrary.NonVisualComponents
} }
} }
private void AddTableHeaderRow(Table table, List<ColumnParameters> columnParameters) private void AddTableHeaderRow(Table table, List<ColumnParameters> columnParameters, bool isFirstRow)
{ {
TableRow headerRow = new(); TableRow headerRow = new();
foreach (var column in columnParameters) foreach (var column in columnParameters)
{ {
TableCell cell = new(new Paragraph(new Run(new Text(column.Header)))); var header = isFirstRow ? column.FirstRowHeader : column.SecondRowHeader;
TableCell cell = new(new Paragraph(new Run(new Text(header))));
TableCellProperties cellProps = new() TableCellProperties cellProps = new()
{ {
TableCellWidth = new TableCellWidth { Type = TableWidthUnitValues.Dxa, Width = (column.Width * 566.93).ToString("F0") }, TableCellWidth = new TableCellWidth { Type = TableWidthUnitValues.Dxa, Width = (column.Width * 566.93).ToString("F0") },

View File

@ -1,5 +1,4 @@
using RodionovLibrary.NonVisualComponents.HelperModels; using RodionovLibrary.NonVisualComponents.HelperModels;
using System.Windows.Forms;
namespace WinForms namespace WinForms
{ {
@ -69,12 +68,18 @@ namespace WinForms
} }
private void ButtonWordText_Click(object sender, EventArgs e) private void ButtonWordText_Click(object sender, EventArgs e)
{
using var dialog = new SaveFileDialog
{
Filter = "docx|*.docx"
};
if (dialog.ShowDialog() == DialogResult.OK)
{ {
try try
{ {
wordLongTextComponent.CreateWordText(new WordLongTextInfo() wordLongTextComponent.CreateWordText(new WordLongTextInfo()
{ {
FileName = AppDomain.CurrentDomain.BaseDirectory + "test_long_text.docx", FileName = dialog.FileName,
Title = "ГЛАВА 1. Нежданные гости", Title = "ГЛАВА 1. Нежданные гости",
Paragraphs = new string[] { "Жил-был в норе под землей хоббит. Не в какой-то там мерзкой грязной сырой норе, где со всех сторон торчат хвосты червей и противно пахнет плесенью, но и не в сухой песчаной голой норе, где не на что сесть и нечего съесть. Нет, нора была хоббичья, а значит — благоустроенная.", Paragraphs = new string[] { "Жил-был в норе под землей хоббит. Не в какой-то там мерзкой грязной сырой норе, где со всех сторон торчат хвосты червей и противно пахнет плесенью, но и не в сухой песчаной голой норе, где не на что сесть и нечего съесть. Нет, нора была хоббичья, а значит — благоустроенная.",
"Она начиналась идеально круглой, как иллюминатор, дверью, выкрашенной зеленой краской, с сияющей медной ручкой точно посередине. Дверь отворялась внутрь, в длинный коридор, похожий на железнодорожный туннель, но туннель без гари и без дыма и тоже очень благоустроенный: стены там были обшиты панелями, пол выложен плитками и устлан ковром, вдоль стен стояли полированные стулья, и всюду были прибиты крючочки для шляп и пальто, так как хоббит любил гостей.", "Она начиналась идеально круглой, как иллюминатор, дверью, выкрашенной зеленой краской, с сияющей медной ручкой точно посередине. Дверь отворялась внутрь, в длинный коридор, похожий на железнодорожный туннель, но туннель без гари и без дыма и тоже очень благоустроенный: стены там были обшиты панелями, пол выложен плитками и устлан ковром, вдоль стен стояли полированные стулья, и всюду были прибиты крючочки для шляп и пальто, так как хоббит любил гостей.",
@ -88,38 +93,31 @@ namespace WinForms
MessageBox.Show("Произошла ошибка: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Произошла ошибка: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
}
private void ButtonWordTable_Click(object sender, EventArgs e) private void ButtonWordTable_Click(object sender, EventArgs e)
{
using var dialog = new SaveFileDialog
{
Filter = "docx|*.docx"
};
if (dialog.ShowDialog() == DialogResult.OK)
{ {
try try
{ {
var firstRowColumns = new List<ColumnParameters> var columns = new List<ColumnParameters>
{ {
new() { Header = "Èäåíò", PropertyName = "", Width = 1.2 }, new() { FirstRowHeader = "Èäåíò", PropertyName = "Id", Width = 1.2 },
new() { Header = "Ñòàòóñ", PropertyName = "", Width = 1.2 }, new() { FirstRowHeader = "Ñòàòóñ", PropertyName = "Status", Width = 1.2 },
new() { Header = "Ëè÷íûå äàííûå", PropertyName = "", Width = 1.6 }, new() { FirstRowHeader = "Ëè÷íûå äàííûå", SecondRowHeader = "Èìÿ", PropertyName = "FirstName", Width = 1.6 },
new() { Header = "Ëè÷íûå äàííûå", PropertyName = "", Width = 1.6 }, new() { FirstRowHeader = "Ëè÷íûå äàííûå", SecondRowHeader = "Ôàìèëèÿ", PropertyName = "LastName", Width = 1.6 },
new() { Header = "Ëè÷íûå äàííûå", PropertyName = "", Width = 1.6 }, new() { FirstRowHeader = "Ëè÷íûå äàííûå", SecondRowHeader = "Âîçðàñò", PropertyName = "Age", Width = 1.6 },
new() { Header = "Äåòè", PropertyName = "", Width = 1.2 }, new() { FirstRowHeader = "Äåòè", PropertyName = "Children", Width = 1.2 },
new() { Header = "Ìàøèíà", PropertyName = "", Width = 1.6 }, new() { FirstRowHeader = "Ìàøèíà", PropertyName = "Car", Width = 1.6 },
new() { Header = "Ðàáîòà", PropertyName = "", Width = 2.5 }, new() { FirstRowHeader = "Ðàáîòà", SecondRowHeader = "Ïîäðàçäåëåíèå", PropertyName = "Department", Width = 2.5 },
new() { Header = "Ðàáîòà", PropertyName = "", Width = 2.5 }, new() { FirstRowHeader = "Ðàáîòà", SecondRowHeader = "Äîëæíîñòü", PropertyName = "Position", Width = 2.5 },
new() { Header = "Ïðåìèÿ", PropertyName = "", Width = 2 } new() { FirstRowHeader = "Ïðåìèÿ", PropertyName = "Bonus", Width = 2 }
};
var secondRowColumns = new List<ColumnParameters>
{
new() { Header = "Èäåíò", PropertyName = "Id", Width = 1.2 },
new() { Header = "Ñòàòóñ", PropertyName = "Status", Width = 1.2 },
new() { Header = "Èìÿ", PropertyName = "FirstName", Width = 1.6 },
new() { Header = "Ôàìèëèÿ", PropertyName = "LastName", Width = 1.6 },
new() { Header = "Âîçðàñò", PropertyName = "Age", Width = 1.6 },
new() { Header = "Äåòè", PropertyName = "Children", Width = 1.2 },
new() { Header = "Ìàøèíà", PropertyName = "Car", Width = 1.6 },
new() { Header = "Ïîäðàçäåëåíèå", PropertyName = "Department", Width = 2.5 },
new() { Header = "Äîëæíîñòü", PropertyName = "Position", Width = 2.5 },
new() { Header = "Ïðåìèÿ", PropertyName = "Bonus", Width = 2 }
}; };
var employees = new List<Employee> var employees = new List<Employee>
@ -139,10 +137,9 @@ namespace WinForms
var tableInfo = new WordTableInfo<Employee> var tableInfo = new WordTableInfo<Employee>
{ {
FileName = AppDomain.CurrentDomain.BaseDirectory + "test_table.docx", FileName = dialog.FileName,
Title = "Заголовок", Title = "Заголовок",
FirstRowColumnParameters = firstRowColumns, ColumnParameters = columns,
SecondRowColumnParameters = secondRowColumns,
Items = employees, Items = employees,
MergedColumns = mergedColumns MergedColumns = mergedColumns
}; };
@ -156,6 +153,7 @@ namespace WinForms
MessageBox.Show("Произошла ошибка: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show("Произошла ошибка: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
}
private void ButtonWordDiagram_Click(object sender, EventArgs e) private void ButtonWordDiagram_Click(object sender, EventArgs e)
{ {