public static void RestoreSorting(DataGridSortDescription sortDescription, DataGrid grid) { if (sortDescription.SortDescription != null && sortDescription.SortDescription.Count == 0) { if (PluginSettings.Instance.EnableAutomaticSorting) { if (PluginSettings.Instance.SortOnColumnIndex >= 0 && PluginSettings.Instance.SortOnColumnIndex < grid.Columns.Count) { SortDescription sd = new SortDescription(grid.Columns[PluginSettings.Instance.SortOnColumnIndex].SortMemberPath, PluginSettings.Instance.SortDirection == 0 ? ListSortDirection.Ascending : ListSortDirection.Descending); sortDescription.SortDescription.Add(sd); } } } //restore the column sort order if (sortDescription.SortDescription != null && sortDescription.SortDescription.Count > 0) { ICollectionView view = CollectionViewSource.GetDefaultView(grid.ItemsSource); view = CollectionViewSource.GetDefaultView(grid.ItemsSource); sortDescription.SortDescription.ToList().ForEach(x => view.SortDescriptions.Add(x)); view.Refresh(); } //restore the sort directions. Arrows are nice :) foreach (DataGridColumn c in grid.Columns) { if (sortDescription.SortDirection.ContainsKey(c)) { c.SortDirection = sortDescription.SortDirection[c]; } } }
private void UpdateListFilter(bool preserveSort) { if (_orgSourceList != null) { DataGridSortDescription sort = null; if (preserveSort) sort = DataGridUtil.SaveSorting(cacheList); if (string.IsNullOrEmpty(_filterOnText)) { cacheList.ItemsSource = _orgSourceList; } else { string s = _filterOnText.ToLower(); cacheList.ItemsSource = (from a in _orgSourceList where (a.City!=null && a.City.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) || (a.Name!=null && a.Name.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) || (a.Country!=null && a.Country.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) || (a.State != null && a.State.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) || (a.Municipality != null && a.Municipality.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) || (a.Owner != null && a.Owner.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) || a.Code.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0 select a).ToList(); } if (preserveSort) DataGridUtil.RestoreSorting(sort, cacheList); } }
public static DataGridSortDescription SaveSorting(DataGrid grid) { DataGridSortDescription sortDescription = new DataGridSortDescription(); //Save the current sort order of the columns ICollectionView view = CollectionViewSource.GetDefaultView(grid.ItemsSource); SortDescriptionCollection sortDescriptions = new SortDescriptionCollection(); if (view != null) { view.SortDescriptions.ToList().ForEach(sd => sortDescriptions.Add(sd)); } sortDescription.SortDescription = sortDescriptions; //save the sort directions (these define the little arrow on the column header...) IDictionary<DataGridColumn, ListSortDirection?> sortDirections = new Dictionary<DataGridColumn, ListSortDirection?>(); foreach (DataGridColumn c in grid.Columns) { sortDirections.Add(c, c.SortDirection); } sortDescription.SortDirection = sortDirections; return sortDescription; }
public void UpdateDataGrid(IEnumerable<Framework.Data.Geocache> list) { _orgSourceList = list; //using (var d = Dispatcher.DisableProcessing()) //if (!_ignoreUpdate) { DataGridSortDescription sort = DataGridUtil.SaveSorting(cacheList); cacheList.ItemsSource = null; if (string.IsNullOrEmpty(_filterOnText)) { cacheList.ItemsSource = list; } else { UpdateListFilter(false); } if (PluginSettings.Instance.EnableAutomaticSorting) { DataGridUtil.RestoreSorting(sort, cacheList); } } _ignoreUpdate = false; }