/// <summary>
/// The user has pressed OK. Do what's requied.
/// </summary>
/// <param name="olv"></param>
/// <param name="view"></param>
protected void Apply(ObjectListView olv, View view)
{
olv.Freeze();
// Update the column definitions to reflect whether they have been hidden
if (view == View.Details)
{
foreach (OLVColumn col in olv.AllColumns)
{
col.IsVisible = this.MapColumnToVisible[col];
}
}
else
{
foreach (OLVColumn col in olv.AllColumns)
{
col.IsTileViewColumn = this.MapColumnToVisible[col];
}
}
// Collect the columns are still visible
List <OLVColumn> visibleColumns = this.RearrangableColumns.FindAll(
delegate(OLVColumn x) { return(this.MapColumnToVisible[x]); });
// Detail view and Tile view have to be handled in different ways.
if (view == View.Details)
{
// Of the still visible columns, change DisplayIndex to reflect their position in the rearranged list
olv.ChangeToFilteredColumns(view);
foreach (OLVColumn col in visibleColumns)
{
col.DisplayIndex = visibleColumns.IndexOf((OLVColumn)col);
col.LastDisplayIndex = col.DisplayIndex;
}
}
else
{
// In Tile view, DisplayOrder does nothing. So to change the display order, we have to change the
// order of the columns in the Columns property.
// Remember, the primary column is special and has to remain first!
OLVColumn primaryColumn = this.AllColumns[0];
visibleColumns.Remove(primaryColumn);
olv.Columns.Clear();
olv.Columns.Add(primaryColumn);
olv.Columns.AddRange(visibleColumns.ToArray());
olv.CalculateReasonableTileSize();
}
olv.Unfreeze();
}