Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>As far as initial loading goes, I found it neccessary to extend the public API to dramatically improve large # of column loading - we're talking minutes to under a second. That said, I have similar issues with scrolling performance, even 500+ columns is really slow to scroll. </p> <p>Setting columns within my derived datagrid:</p> <pre><code>var columns = new DataGridColumnCollection(true, dataGrid); for (int i = 0; i &lt; pivotTable.DetailsColumnCount; i++) { if (!pivotTable.NullColumns.Contains(i)) { columns.Add(new PivotDetailColumn(pivotTable, i)); } } columns.ForceUpdate(); dataGrid.Columns = columns; dataGrid.ItemsSource = Enumerable.Range(0, pivotTable.DetailsRowCount) .Where(i =&gt; !pivotTable.NullRows.Contains(i)) // Only non null rows .ToList(); </code></pre> <p>Fixes to DataGridColumnCollection:</p> <pre><code>public class DataGridColumnCollection : ObservableCollection&lt;DataGridColumn&gt; { private bool _DeferColumnChangeUpdates = false; public DataGridColumnCollection(bool deferColumnChangeUpdates, DataGrid dataGridOwner) : this(dataGridOwner) { _DeferColumnChangeUpdates = deferColumnChangeUpdates; } public DataGridColumnCollection(DataGrid dataGridOwner) { Debug.Assert(dataGridOwner != null, "We should have a valid DataGrid"); DisplayIndexMap = new List&lt;int&gt;(5); _dataGridOwner = dataGridOwner; RealizedColumnsBlockListForNonVirtualizedRows = null; RealizedColumnsDisplayIndexBlockListForNonVirtualizedRows = null; RebuildRealizedColumnsBlockListForNonVirtualizedRows = true; RealizedColumnsBlockListForVirtualizedRows = null; RealizedColumnsDisplayIndexBlockListForVirtualizedRows = null; RebuildRealizedColumnsBlockListForVirtualizedRows = true; } #region Protected Overrides public void ForceUpdate() { if (DisplayIndexMapInitialized) { UpdateDisplayIndexForNewColumns(this, 0); } InvalidateHasVisibleStarColumns(); } protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) { switch (e.Action) { case NotifyCollectionChangedAction.Add: if (!_DeferColumnChangeUpdates) { if (DisplayIndexMapInitialized) { UpdateDisplayIndexForNewColumns(e.NewItems, e.NewStartingIndex); } InvalidateHasVisibleStarColumns(); } break; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload