Reports for WinForms | ComponentOne
Working with C1PrintDocument / Tables / Table and Column Width, Row Height
In This Topic
    Table and Column Width, Row Height
    In This Topic

    Both rows and columns in C1PrintDocument tables can be auto-sized but the default behavior is different for rows and columns. By default, rows have auto-height (calculated based on the content of cells in the row), while columns' widths are fixed. The default width of a RenderTable is equal to the width of its parent, and that width is shared equally between all columns. So the following code will create a page-wide table, with 3 equally wide columns, and 10 rows with the heights that auto-adjust to the height of the cells' content:

    To write code in Visual Basic

    Visual Basic
    Copy Code
    Dim rt As New C1.C1Preview.RenderTable()
    rt.Style.GridLines.All = LineDef.Default
    Dim row As Integer = 0
    Do While (row < 10)
      Dim col As Integer = 0
        Do While (col < 3)
          rt.Cells(row, col).Text = String.Format( _
              "Cell({0},{1})", row, col)
          col += 1
        Loop
      row += 1
    Loop
    doc.Body.Children.Add(rt)
    

    To write code in C#

    C#
    Copy Code
    RenderTable rt = new RenderTable();
    rt.Style.GridLines.All = LineDef.Default;
    for (int row = 0; row < 10; ++row)
      for (int col = 0; col < 3; ++col)
        rt.Cells[row, col].Text = string.Format(
            "Cell({0}, {1})", row, col);
    doc.Body.Children.Add(rt);
    

    To make a fully auto-sized table, as compared to the default settings, two things must be done:

    Here's the modified code:

    To write code in Visual Basic

    Visual Basic
    Copy Code
    Dim rt As New C1.C1Preview.RenderTable()
    rt.Style.GridLines.All = LineDef.Default
    Dim row As Integer = 0
    Do While (row < 10)
      Dim col As Integer = 0
        Do While (col < 3)
          rt.Cells(row, col).Text = String.Format( _
              "Cell({0},{1})", row, col)
          col += 1
        Loop
      row += 1
    Loop
    rt.Width = Unit.Auto
    rt.ColumnSizingMode = TableSizingModeEnum.Auto
    doc.Body.Children.Add(rt)
    

    To write code in C#

    C#
    Copy Code
    RenderTable rt = new RenderTable();
    rt.Style.GridLines.All = LineDef.Default;
    for (int row = 0; row < 10; ++row)
      for (int col = 0; col < 3; ++col)
        rt.Cells[row, col].Text = string.Format(
            "Cell({0}, {1})", row, col);
    rt.Width = Unit.Auto;
    rt.ColumnSizingMode = TableSizingModeEnum.Auto;
    doc.Body.Children.Add(rt);
    

    The modified code makes each column of the table only as wide as needed to accommodate all text within cells.