Back to Migration Overview
TableSelect<T>() and TableMultiSelect<T>() keep their v5.x names in v6.x — only the methods
below changed.
TableMultiSelect<T> renamed its confirmation validator. TableSelect<T> (single-selection) keeps
PredicateSelected.
| Control | v5.x member | v6.x member |
|---|---|---|
| TableMultiSelect | PredicateSelected(Func<T, bool>) |
PredicateChecked(Func<T, bool>) |
| TableMultiSelect | PredicateSelected(Func<T, (bool, string?)>) |
PredicateChecked(Func<T, (bool, string?)>) |
The async overloads follow the same name:
TableMultiSelectusesPredicateCheckedAsync;TableSelectusesPredicateSelectedAsync.
AddColumn — full reworkThis is the most impactful change. The AddColumn signature was completely redesigned.
Before (v5.x):
using PromptPlusLibrary;
using ConsolePlusLibrary;
PromptPlus.Controls.TableSelect<Product>("Products:")
.AddColumn("Name", width: 20, p => p.Name,
rowAlignment: TextAlignment.Left,
titleAlignment: TextAlignment.Center,
titlereplaceswidth: true,
maxslidinglines: 0)
.AddColumn("Price", width: 10, p => p.Price.ToString("C"),
rowAlignment: TextAlignment.Right)
.AddItems(products)
.Run();
After (v6.x):
using PromptPlusLibrary;
using ConsolePlusLibrary;
PromptPlus.Controls.TableSelect<Product>("Products:")
.AddColumn("Name",
selector: p => p.Name,
width: 20,
alignment: ColumnAlignment.Left,
isFilterable: true)
.AddColumn("Price",
selector: p => p.Price,
formatter: val => ((decimal)val).ToString("C"),
width: 10,
alignment: ColumnAlignment.Right)
.AddItems(products)
.Run();
Key differences:
- selector is
Func<T, object>(wasFunc<T, string>)formatteris a separate optionalFunc<object, string>?TextAlignment→ColumnAlignmenttitleAlignment,titlereplaceswidth,maxslidinglinesremoved- new
isFilterablecontrols whether the column participates in filtering
Filter(FilterMode, bool caseinsensitive) → Filter(FilterMode, FilterTableMode)// v5.x — second parameter was case sensitivity
.Filter(FilterMode.Contains, false)
// v6.x — second parameter is the filter scope (default FilterTableMode.Answer)
.Filter(FilterMode.Contains, FilterTableMode.Answer)
Layout(TableLayout) → LayoutMode(TableLayoutMode)// v5.x
.Layout(TableLayout.SingleGridFull)
// v6.x — method and enum renamed
.LayoutMode(TableLayoutMode.SingleBox)
HideHeaders(bool) → HideElements(HideTable)The v5.x boolean toggle was replaced by a [Flags] enum that can hide several table regions at once.
// v5.x
.HideHeaders(true)
// v6.x
.HideElements(HideTable.Header)
ChangeDescription signature changed// v5.x — received row/column indices
.ChangeDescription((item, row, col) => $"{item.Name}")
// v6.x
.ChangeDescription(item => $"{item.Name}")
OnlyView(bool) → ViewOnly(bool)// v5.x
.OnlyView(true)
// v6.x
.ViewOnly(true)
SeparatorRows — removed with no equivalent// v5.x only — remove during migration
.SeparatorRows(true)
MaxWidth(byte) — removed// v5.x only — remove during migration
.MaxWidth(80)
TableSelect<T> return type changed (single-select)// v5.x — TableSelect<T>.Run() → ResultPrompt<T>
Product? picked = PromptPlus.Controls.TableSelect<Product>("Products:")
.AddColumn(/* ... */).AddItems(products).Run().Content;
// v6.x — TableSelect<T>.Run() → ResultPrompt<TableSelectResult<T>>
var result = PromptPlus.Controls.TableSelect<Product>("Products:")
.AddColumn(/* ... */).AddItems(products).Run();
Product? picked = result.Content.Value; // the selected row
int row = result.Content.RowIndex;
int col = result.Content.ColumnIndex;
TableMultiSelect<T>.Run()still returnsResultPrompt<T[]>(read via.Content).
HorizontalScroll (TableSelect and TableMultiSelect)PromptPlus.Controls.TableSelect<Product>("Products:")
.AddColumn("Name", p => p.Name, width: 30)
.AddColumn("Description", p => p.Description, width: 50)
.AddItems(products)
.HorizontalScroll(HorizontalScrollMode.Column)
.Run();
PromptPlus.Controls.TableMultiSelect<Product>("Products:")
.AddColumn("Name", p => p.Name)
.AddItems(products)
.EnableHistory("products_selection")
.UseDefaultHistory()
.TextSelectorAsync(async p => await FormatNameAsync(p))
.ChangeDescriptionAsync(async p => (await LoadInfoAsync(p.Id)).Summary)
.Run();
New on TableSelect/TableMultiSelect: DefaultMatchBy · ViewOnly · HorizontalScroll · ChangeDescriptionAsync · TextSelectorAsync · InteractionAsync; TableSelect adds PredicateSelectedAsync (x2) and TableMultiSelect adds PredicateCheckedAsync (x2); plus EnableHistory / UseDefaultHistory on TableMultiSelect.
| Method | v5.x | v6.x | Change |
|---|---|---|---|
| Factory | TableSelect<T>() |
TableSelect<T>() |
Unchanged |
AddColumn(title, width, Func<T,string>, TextAlignment, TextAlignment, bool, int) |
✅ | ❌ | Reworked |
AddColumn(header, Func<T,object>, Func<object,string>?, int?, ColumnAlignment, bool) |
❌ | ✅ | New form |
Filter(FilterMode, bool) |
✅ | ❌ | Parameter changed |
Filter(FilterMode, FilterTableMode) |
❌ | ✅ | New form |
Layout(TableLayout) |
✅ | ❌ | Renamed to LayoutMode(TableLayoutMode) |
LayoutMode(TableLayoutMode) |
❌ | ✅ | New name |
HideHeaders(bool) |
✅ | ❌ | Replaced by HideElements(HideTable) |
HideElements(HideTable) |
❌ | ✅ | New |
OnlyView(bool) |
✅ | ❌ | Renamed to ViewOnly |
ChangeDescription(Func<T,int,int,string>) |
✅ | ❌ | → ChangeDescription(Func<T,string>) |
SeparatorRows(bool) |
✅ | ❌ | Removed with no equivalent |
MaxWidth(byte) |
✅ | ❌ | Removed |
EqualItems(Func<T,T,bool>) |
✅ | ❌ | Renamed to DefaultMatchBy |
TextSelector(Func<T,string>) · PageSize(byte) · AddItem(T) · AddItems(IEnumerable<T>) · Interaction |
✅ | ✅ | Unchanged |
HorizontalScroll · ViewOnly · DefaultMatchBy · EnableHistory · UseDefaultHistory · TextSelectorAsync · InteractionAsync · async variants |
❌ | ✅ | New |
Run() |
ResultPrompt<T> |
ResultPrompt<TableSelectResult<T>> |
Return type changed |
| Method | v5.x | v6.x | Change |
|---|---|---|---|
| Factory | TableMultiSelect<T>() |
TableMultiSelect<T>() |
Unchanged |
AddColumn(...) |
✅ | ✅ | Same rework as above |
Filter(FilterMode, bool) |
✅ | ❌ | → Filter(FilterMode, FilterTableMode) |
Layout(TableLayout) |
✅ | ❌ | → LayoutMode(TableLayoutMode) |
HideHeaders(bool) |
✅ | ❌ | → HideElements(HideTable) |
OnlyView(bool) |
✅ | ❌ | → ViewOnly |
SeparatorRows(bool) |
✅ | ❌ | Removed with no equivalent |
MaxWidth(byte) |
✅ | ❌ | Removed |
EqualItems(Func<T,T,bool>) |
✅ | ❌ | Renamed to DefaultMatchBy |
TextSelector(Func<T,string>) · ChangeDescription(Func<T,string>) · Interaction · AddItem(T, bool, bool) · AddItems(IEnumerable<T>, bool, bool) |
✅ | ✅ | Unchanged |
Range(int, int?) |
✅ | ✅ | Unchanged |
PredicateSelected (x2) |
✅ | ❌ | Renamed to PredicateChecked (x2) |
EnableHistory · UseDefaultHistory · ViewOnly · DefaultMatchBy · HorizontalScroll · TextSelectorAsync · ChangeDescriptionAsync · InteractionAsync · PredicateChecked (x2) · async variants |
❌ | ✅ | New |
Run() |
ResultPrompt<T[]> |
ResultPrompt<T[]> |
Unchanged |