spectreconsole/spectre.console · error · IndexOutOfRangeException
Table column index cannot exceed the number of rows in the t
Error message
Table column index cannot exceed the number of rows in the table.
What it means
In TableRowCollection.Update, if column >= the row's renderable count it throws IndexOutOfRangeException. NOTE: the thrown message says 'Table column index cannot exceed the number of ROWS in the table' — this is a copy-paste bug in the message text; it actually guards the column bound, not rows.
Source
Thrown at src/Spectre.Console/Widgets/Table/TableRowCollection.cs:110
if (row < 0)
{
throw new IndexOutOfRangeException("Table row index cannot be negative.");
}
else if (row >= _list.Count)
{
throw new IndexOutOfRangeException("Table row index cannot exceed the number of rows in the table.");
}
var tableRow = _list.ElementAt(row);
var currentRenderables = tableRow.ToList();
if (column < 0)
{
throw new IndexOutOfRangeException("Table column index cannot be negative.");
}
else if (column >= currentRenderables.Count)
{
throw new IndexOutOfRangeException("Table column index cannot exceed the number of rows in the table.");
}
currentRenderables.RemoveAt(column);
currentRenderables.Insert(column, cellData);
var newTableRow = new TableRow(currentRenderables);
_list.RemoveAt(row);
_list.Insert(row, newTableRow);
}
}
/// <summary>
/// Removes a row at the specified index.
/// </summary>
/// <param name="index">The index to remove a row at.</param>View on GitHub (pinned to 0acc92fada)
Solutions
- Check column < table.Columns.Count (and column >= 0) before calling Update.
- When debugging, ignore the misleading 'rows' word in the message — verify the column index.
- Recompute column indices after structural column changes.
Example fix
// before
table.Rows.Update(rowIndex, colIndex, cell); // colIndex == Columns.Count
// after
if (colIndex >= 0 && colIndex < table.Columns.Count)
table.Rows.Update(rowIndex, colIndex, cell); Defensive patterns
Strategy: validation
Validate before calling
if (column < 0 || column >= table.Columns.Count) return; // or throw table.Rows.Update(row, column, cell);
Prevention
- Check column < table.Columns.Count before calling Update.
- When debugging, remember the message wrongly says 'rows' — verify the column index.
- Use table.Columns.Count as an exclusive upper bound, not a valid index.
When it happens
Trigger: Calling Update with a column index >= the number of columns in that row (e.g. column == table.Columns.Count, or referencing a column that does not exist).
Common situations: Using table.Columns.Count as a valid index (it is one-past-last); stale column index after AddColumn/RemoveColumn; assuming a row has more columns than defined; confusing zero-based vs count when mapping data to columns.
Related errors
- Table column index cannot be negative.
- Value cannot be null. (Parameter 'header')
- Table row index cannot be negative.
- Table row index cannot exceed the number of rows in the tabl
- Value cannot be null. (Parameter 'value')
AI-assisted analysis of spectreconsole/spectre.console@0acc92fada (2026-08-13).
Data as JSON: /api/errors/0a1ca1a739b8398e.
Report an issue: GitHub.