Изменения во втором компоненте
This commit is contained in:
parent
5177f3c8e1
commit
d990fdb00f
@ -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;
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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") },
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using RodionovLibrary.NonVisualComponents.HelperModels;
|
using RodionovLibrary.NonVisualComponents.HelperModels;
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace WinForms
|
namespace WinForms
|
||||||
{
|
{
|
||||||
@ -70,90 +69,89 @@ namespace WinForms
|
|||||||
|
|
||||||
private void ButtonWordText_Click(object sender, EventArgs e)
|
private void ButtonWordText_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
try
|
using var dialog = new SaveFileDialog
|
||||||
{
|
{
|
||||||
wordLongTextComponent.CreateWordText(new WordLongTextInfo()
|
Filter = "docx|*.docx"
|
||||||
|
};
|
||||||
|
if (dialog.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
FileName = AppDomain.CurrentDomain.BaseDirectory + "test_long_text.docx",
|
wordLongTextComponent.CreateWordText(new WordLongTextInfo()
|
||||||
Title = "ÃËÀÂÀ 1. Íåæäàííûå ãîñòè",
|
{
|
||||||
Paragraphs = new string[] { "Æèë-áûë â íîðå ïîä çåìëåé õîááèò. Íå â êàêîé-òî òàì ìåðçêîé ãðÿçíîé ñûðîé íîðå, ãäå ñî âñåõ ñòîðîí òîð÷àò õâîñòû ÷åðâåé è ïðîòèâíî ïàõíåò ïëåñåíüþ, íî è íå â ñóõîé ïåñ÷àíîé ãîëîé íîðå, ãäå íå íà ÷òî ñåñòü è íå÷åãî ñúåñòü. Íåò, íîðà áûëà õîááè÷üÿ, à çíà÷èò — áëàãîóñòðîåííàÿ.",
|
FileName = dialog.FileName,
|
||||||
|
Title = "ÃËÀÂÀ 1. Íåæäàííûå ãîñòè",
|
||||||
|
Paragraphs = new string[] { "Æèë-áûë â íîðå ïîä çåìëåé õîááèò. Íå â êàêîé-òî òàì ìåðçêîé ãðÿçíîé ñûðîé íîðå, ãäå ñî âñåõ ñòîðîí òîð÷àò õâîñòû ÷åðâåé è ïðîòèâíî ïàõíåò ïëåñåíüþ, íî è íå â ñóõîé ïåñ÷àíîé ãîëîé íîðå, ãäå íå íà ÷òî ñåñòü è íå÷åãî ñúåñòü. Íåò, íîðà áûëà õîááè÷üÿ, à çíà÷èò — áëàãîóñòðîåííàÿ.",
|
||||||
"Она начиналась идеально круглой, как иллюминатор, дверью, выкрашенной зеленой краской, с сияющей медной ручкой точно посередине. Дверь отворялась внутрь, в длинный коридор, похожий на железнодорожный туннель, но туннель без гари и без дыма и тоже очень благоустроенный: стены там были обшиты панелями, пол выложен плитками и устлан ковром, вдоль стен стояли полированные стулья, и всюду были прибиты крючочки для шляп и пальто, так как хоббит любил гостей.",
|
"Она начиналась идеально круглой, как иллюминатор, дверью, выкрашенной зеленой краской, с сияющей медной ручкой точно посередине. Дверь отворялась внутрь, в длинный коридор, похожий на железнодорожный туннель, но туннель без гари и без дыма и тоже очень благоустроенный: стены там были обшиты панелями, пол выложен плитками и устлан ковром, вдоль стен стояли полированные стулья, и всюду были прибиты крючочки для шляп и пальто, так как хоббит любил гостей.",
|
||||||
"Туннель вился все дальше и дальше и заходил довольно глубоко, но не в самую глубину Холма, как его именовали жители на много миль в окружности. По обеим сторонам туннеля шли двери — много-много круглых дверей. Хоббит не признавал восхождений по лестницам: спальни, ванные, погреба, кладовые (целая куча кладовых), гардеробные (хоббит отвел несколько комнат под хранение одежды), кухни, столовые располагались в одном этаже и, более того, в одном и том же коридоре.",
|
"Туннель вился все дальше и дальше и заходил довольно глубоко, но не в самую глубину Холма, как его именовали жители на много миль в окружности. По обеим сторонам туннеля шли двери — много-много круглых дверей. Хоббит не признавал восхождений по лестницам: спальни, ванные, погреба, кладовые (целая куча кладовых), гардеробные (хоббит отвел несколько комнат под хранение одежды), кухни, столовые располагались в одном этаже и, более того, в одном и том же коридоре.",
|
||||||
"Лучшие комнаты находились по левую руку, и только в них имелись окна — глубоко сидящие круглые окошечки с видом на сад и на дальние луга, спускавшиеся к реке."}
|
"Лучшие комнаты находились по левую руку, и только в них имелись окна — глубоко сидящие круглые окошечки с видом на сад и на дальние луга, спускавшиеся к реке."}
|
||||||
});
|
});
|
||||||
MessageBox.Show("Ãîòîâî!");
|
MessageBox.Show("Ãîòîâî!");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
try
|
using var dialog = new SaveFileDialog
|
||||||
{
|
{
|
||||||
var firstRowColumns = new List<ColumnParameters>
|
Filter = "docx|*.docx"
|
||||||
{
|
};
|
||||||
new() { Header = "Èäåíò", PropertyName = "", Width = 1.2 },
|
if (dialog.ShowDialog() == DialogResult.OK)
|
||||||
new() { Header = "Ñòàòóñ", PropertyName = "", Width = 1.2 },
|
|
||||||
new() { Header = "Ëè÷íûå äàííûå", PropertyName = "", Width = 1.6 },
|
|
||||||
new() { Header = "Ëè÷íûå äàííûå", PropertyName = "", Width = 1.6 },
|
|
||||||
new() { Header = "Ëè÷íûå äàííûå", PropertyName = "", Width = 1.6 },
|
|
||||||
new() { Header = "Äåòè", PropertyName = "", Width = 1.2 },
|
|
||||||
new() { Header = "Ìàøèíà", PropertyName = "", Width = 1.6 },
|
|
||||||
new() { Header = "Ðàáîòà", PropertyName = "", Width = 2.5 },
|
|
||||||
new() { Header = "Ðàáîòà", PropertyName = "", Width = 2.5 },
|
|
||||||
new() { Header = "Ïðåìèÿ", PropertyName = "", 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>
|
|
||||||
{
|
|
||||||
new() { Id = 1, Status = "íåò", FirstName = "Èâàí", LastName = "Èâàíîâ", Age = 34, Children = "íåò", Car = "åñòü", Department = "Äåïàðòàìåíò 1", Position = "Èíæåíåð", Bonus = 2000.1 },
|
|
||||||
new() { Id = 2, Status = "íåò", FirstName = "Ïåòð", LastName = "Ïåòðîâ", Age = 44, Children = "åñòü", Car = "åñòü", Department = "Äåïàðòàìåíò 1", Position = "Èíæåíåð", Bonus = 2000.1 },
|
|
||||||
new() { Id = 3, Status = "äà", FirstName = "Ñåðãåé", LastName = "Ñåðãååâ", Age = 55, Children = "íåò", Car = "íåò", Department = "Äåïàðòàìåíò 1", Position = "Ðóêîâîäèòåëü", Bonus = 5000.5 },
|
|
||||||
new() { Id = 4, Status = "íåò", FirstName = "Îëüãà", LastName = "Èâàíîâà", Age = 34, Children = "åñòü", Car = "íåò", Department = "Áóõãàëòåðèÿ", Position = "Áóõãàëòåð", Bonus = 2000.1 },
|
|
||||||
new() { Id = 5, Status = "äà", FirstName = "Òàòüÿíà", LastName = "Ïåòðîâà", Age = 44, Children = "íåò", Car = "íåò", Department = "Áóõãàëòåðèÿ", Position = "Ñòàðøèé áóõãàëòåð", Bonus = 7000.6 }
|
|
||||||
};
|
|
||||||
|
|
||||||
var mergedColumns = new List<(int, int)>
|
|
||||||
{
|
|
||||||
(2, 4),
|
|
||||||
(7, 8)
|
|
||||||
};
|
|
||||||
|
|
||||||
var tableInfo = new WordTableInfo<Employee>
|
|
||||||
{
|
|
||||||
FileName = AppDomain.CurrentDomain.BaseDirectory + "test_table.docx",
|
|
||||||
Title = "Çàãîëîâîê",
|
|
||||||
FirstRowColumnParameters = firstRowColumns,
|
|
||||||
SecondRowColumnParameters = secondRowColumns,
|
|
||||||
Items = employees,
|
|
||||||
MergedColumns = mergedColumns
|
|
||||||
};
|
|
||||||
|
|
||||||
wordTableComponent.CreateTable(tableInfo);
|
|
||||||
|
|
||||||
MessageBox.Show("Ãîòîâî!");
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
{
|
||||||
MessageBox.Show("Ïðîèçîøëà îøèáêà: " + ex.Message, "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
try
|
||||||
|
{
|
||||||
|
var columns = new List<ColumnParameters>
|
||||||
|
{
|
||||||
|
new() { FirstRowHeader = "Èäåíò", PropertyName = "Id", Width = 1.2 },
|
||||||
|
new() { FirstRowHeader = "Ñòàòóñ", PropertyName = "Status", Width = 1.2 },
|
||||||
|
new() { FirstRowHeader = "Ëè÷íûå äàííûå", SecondRowHeader = "Èìÿ", PropertyName = "FirstName", Width = 1.6 },
|
||||||
|
new() { FirstRowHeader = "Ëè÷íûå äàííûå", SecondRowHeader = "Ôàìèëèÿ", PropertyName = "LastName", Width = 1.6 },
|
||||||
|
new() { FirstRowHeader = "Ëè÷íûå äàííûå", SecondRowHeader = "Âîçðàñò", PropertyName = "Age", Width = 1.6 },
|
||||||
|
new() { FirstRowHeader = "Äåòè", PropertyName = "Children", Width = 1.2 },
|
||||||
|
new() { FirstRowHeader = "Ìàøèíà", PropertyName = "Car", Width = 1.6 },
|
||||||
|
new() { FirstRowHeader = "Ðàáîòà", SecondRowHeader = "Ïîäðàçäåëåíèå", PropertyName = "Department", Width = 2.5 },
|
||||||
|
new() { FirstRowHeader = "Ðàáîòà", SecondRowHeader = "Äîëæíîñòü", PropertyName = "Position", Width = 2.5 },
|
||||||
|
new() { FirstRowHeader = "Ïðåìèÿ", PropertyName = "Bonus", Width = 2 }
|
||||||
|
};
|
||||||
|
|
||||||
|
var employees = new List<Employee>
|
||||||
|
{
|
||||||
|
new() { Id = 1, Status = "íåò", FirstName = "Èâàí", LastName = "Èâàíîâ", Age = 34, Children = "íåò", Car = "åñòü", Department = "Äåïàðòàìåíò 1", Position = "Èíæåíåð", Bonus = 2000.1 },
|
||||||
|
new() { Id = 2, Status = "íåò", FirstName = "Ïåòð", LastName = "Ïåòðîâ", Age = 44, Children = "åñòü", Car = "åñòü", Department = "Äåïàðòàìåíò 1", Position = "Èíæåíåð", Bonus = 2000.1 },
|
||||||
|
new() { Id = 3, Status = "äà", FirstName = "Ñåðãåé", LastName = "Ñåðãååâ", Age = 55, Children = "íåò", Car = "íåò", Department = "Äåïàðòàìåíò 1", Position = "Ðóêîâîäèòåëü", Bonus = 5000.5 },
|
||||||
|
new() { Id = 4, Status = "íåò", FirstName = "Îëüãà", LastName = "Èâàíîâà", Age = 34, Children = "åñòü", Car = "íåò", Department = "Áóõãàëòåðèÿ", Position = "Áóõãàëòåð", Bonus = 2000.1 },
|
||||||
|
new() { Id = 5, Status = "äà", FirstName = "Òàòüÿíà", LastName = "Ïåòðîâà", Age = 44, Children = "íåò", Car = "íåò", Department = "Áóõãàëòåðèÿ", Position = "Ñòàðøèé áóõãàëòåð", Bonus = 7000.6 }
|
||||||
|
};
|
||||||
|
|
||||||
|
var mergedColumns = new List<(int, int)>
|
||||||
|
{
|
||||||
|
(2, 4),
|
||||||
|
(7, 8)
|
||||||
|
};
|
||||||
|
|
||||||
|
var tableInfo = new WordTableInfo<Employee>
|
||||||
|
{
|
||||||
|
FileName = dialog.FileName,
|
||||||
|
Title = "Çàãîëîâîê",
|
||||||
|
ColumnParameters = columns,
|
||||||
|
Items = employees,
|
||||||
|
MergedColumns = mergedColumns
|
||||||
|
};
|
||||||
|
|
||||||
|
wordTableComponent.CreateTable(tableInfo);
|
||||||
|
|
||||||
|
MessageBox.Show("Ãîòîâî!");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
MessageBox.Show("Ïðîèçîøëà îøèáêà: " + ex.Message, "Îøèáêà", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user