Show / Hide Table of Contents

MSDN.WhiteKnight - Stack Overflow answers

Ответ на "Есть ли возможность разрыва таблицы DataGrid WPF для разделения её на несколько таблиц"

Answer 961554

Link

Полоса прокрутки появляется, потому что высоты элемента не хватает для отображения всех строк. Избавиться от нее легко, установив очень большую высоту для DataGrid, но что толку? FlowDocument не поддерживает постраничный вывод отдельного InlineUIContainer (как и BlockUIContainer). Может и можно изобрести какой-то костыльный класс, который будет резать DataGrid на отдельные Bitmap по размеру страницы и отдавать их отдельными UIElement, но нужно ли оно? Качество изображения будет явно не на высоте.

Лучше использовать класс Table, который поддерживает постраничный вывод внутри FlowDocument. Как-то так:

using System.Data;
using System.Windows.Documents;

public static Table CreateTable(DataTable dt)
{
    Table t = new Table();
    TableCell cell;
    TableRow trow;
    var rows = new TableRowGroup();
    t.RowGroups.Add(rows);

    //параметры таблицы
    t.BorderBrush = Brushes.Black;
    t.BorderThickness = new Thickness(1);
    t.CellSpacing = 0;            

    //заголовки столбцов
    trow = new TableRow();
    foreach (DataColumn col in dt.Columns)
    {
        t.Columns.Add(new TableColumn());
        cell = new TableCell(new Paragraph(new Run(col.Caption)));
        cell.BorderBrush = Brushes.Black;
        cell.BorderThickness = new Thickness(1);
        trow.Cells.Add(cell);
    }
    rows.Rows.Add(trow);

    //строки
    foreach (DataRow r in dt.Rows)
    {
        trow = new TableRow();
        foreach (DataColumn col in dt.Columns)
        {
            cell = new TableCell(new Paragraph(new Run(r[col].ToString())));
            cell.BorderBrush = Brushes.Black;
            cell.BorderThickness = new Thickness(1);
            trow.Cells.Add(cell);
        }
        rows.Rows.Add(trow);
    }
    return t;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    //создадим DataTable с тестовыми данными
    DataTable dt = new DataTable();
    dt.Columns.Add(new DataColumn("X"));
    dt.Columns.Add(new DataColumn("Y"));

    for (int i = 0; i < 100; i++)
    {
        var row = dt.NewRow();
        row[0] = i;
        row[1] = Math.Round(Math.Sin(i*0.1),2);
        dt.Rows.Add(row);
    }

    //создадим таблицу на основе DataTable
    Table t = CreateTable(dt);

    //создадим документ
    FlowDocument fd= new FlowDocument(t);
    fdpvDocumentViewer.Document = fd;

}

Content is retrieved from StackExchange API.

Auto-generated by ruso-archive tools.

Back to top Stack Overflow answers (published from sources in GitHub repository). Copyright (c) 2020, MSDN.WhiteKnight. Content licensed under BSD 3-Clause License.
Generated by DocFX