private void GridPreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { try { if (!IsDragging) { return; } //get the target item if (grid.SelectedItem != null) { var targetItem = ((DataRowView)grid.SelectedItem).Row; if (targetItem != null && !ReferenceEquals(DraggedItem, targetItem)) { Loading = true; var row = ColumnChooserDataTable.NewRow(); row[0] = DraggedItem[0]; row[1] = DraggedItem[1]; row[2] = DraggedItem[2]; var rowToBemoved = ColumnChooserDataTable.AsEnumerable().First( r => Convert.ToString(r["columnField"]) == Convert.ToString(DraggedItem["columnField"])); ColumnChooserDataTable.Rows.Remove(rowToBemoved); var currentTargetRow = ColumnChooserDataTable.AsEnumerable().First( r => Convert.ToString(r["columnField"]) == Convert.ToString(targetItem["columnField"])); int targetIndex = ColumnChooserDataTable.Rows.IndexOf(currentTargetRow); if (targetIndex == 0) { targetIndex++; } ColumnChooserDataTable.Rows.InsertAt(row, targetIndex); var previousColumnFieldName = Convert.ToString(ColumnChooserDataTable.Rows[targetIndex - 1]["columnField"]); var columnCollection = MainGrid.Columns; var columns = columnCollection.ToList(); columns.Sort(CompareColumnPosition); var pos = 0; columns.ForEach(c => { c.DisplayIndex = pos; pos++; }); var previousVisiblePosition = previousColumnFieldName == "(Select All)" ? 0 : MainGrid.Columns[ GetColumnIndex(MainGrid.Columns, previousColumnFieldName) ].DisplayIndex; var currentFiledName = Convert.ToString(ColumnChooserDataTable.Rows[targetIndex]["columnField"]); MainGrid.Columns[GetColumnIndex(MainGrid.Columns, currentFiledName)].DisplayIndex = previousVisiblePosition + 1; columns.Clear(); columns.AddRange(columnCollection); if (previousColumnFieldName == "(Select All)") { columns.ForEach(c => { if (c.SortMemberPath != currentFiledName) { if (c.DisplayIndex + 1 < columns.Count) { c.DisplayIndex = c.DisplayIndex + 1; } else { c.DisplayIndex = columns.Count - 1; } } }); } else { columns.ForEach(c => { if (c.SortMemberPath != currentFiledName && c.SortMemberPath != previousColumnFieldName) { if (c.DisplayIndex + 1 < columns.Count) { c.DisplayIndex = c.DisplayIndex + 1; } else { c.DisplayIndex = columns.Count - 1; } } }); } grid.SelectedItem = DraggedItem; //Reorder row summaries after reordering column using column chosser. foreach (var mainGridColumn in MainGrid.Columns) { var rowSummariesColumn = MainGrid.RowSummariesGrid.Columns.FirstOrDefault(column => column.SortMemberPath == mainGridColumn.SortMemberPath); if (rowSummariesColumn != null) { rowSummariesColumn.DisplayIndex = mainGridColumn.DisplayIndex; } } Loading = false; } ResetDragDrop(); } } catch (Exception ex) { Debug.WriteLine(ex.Message); } }
private void CheckBoxChecked(object sender, RoutedEventArgs e) { try { if (Loading) { return; } var chkBox = sender as CheckBox; if (chkBox != null) { if (!chkBox.IsFocused) { return; } var cell = FindParent <DataGridCell>(chkBox); var rowOwner = FindParent <DataGridRow>(cell); var filedName = Convert.ToString(((DataRowView)(rowOwner.Item)).Row.ItemArray[2]); if (string.IsNullOrEmpty(filedName)) { return; } var contextMenu = FindParent <ContextMenu>( grid); var mainGrid = MainGrid; if ( !contextMenu .IsOpen) { return; } if (filedName == "(Select All)") { foreach (var col in mainGrid.Columns) { col.Visibility = chkBox.IsChecked != null && chkBox.IsChecked.Value ? Visibility.Visible : Visibility.Collapsed; } Loading = true; foreach (DataRow dataRow in ColumnChooserDataTable.Rows) { if (Convert.ToString(dataRow["columnField"]) != "(Select All)") { dataRow["chkBox"] = chkBox.IsChecked != null && chkBox.IsChecked.Value; } } if (chkBox.IsChecked != null && chkBox.IsChecked.Value) { var count = mainGrid.Columns.Count(c => ConvertVisibiltyToBool(c.Visibility)); _checkedCount = count; } else { _checkedCount = 0; } Loading = false; } else { var parentCell = FindParent <DataGridCell>(chkBox); var rowparentOwner = FindParent <DataGridRow>(parentCell); ColumnChooserDataTable.AsEnumerable().First( r => Convert.ToString(r["columnField"]) == Convert.ToString(((DataRowView)(rowparentOwner.Item)).Row.ItemArray[2]))["chkBox"] = chkBox.IsChecked != null && chkBox.IsChecked.Value; if (chkBox.IsChecked != null && chkBox.IsChecked.Value) { _checkedCount++; } else { _checkedCount--; } mainGrid.Columns[GetColumnIndex(mainGrid.Columns, filedName)].Visibility = chkBox.IsChecked != null && chkBox.IsChecked.Value ? Visibility.Visible : Visibility.Collapsed; Loading = true; var count = mainGrid.Columns.Count; if (_checkedCount > count) { _checkedCount = count; } ColumnChooserDataTable.AsEnumerable().First(r => r["columnField"].ToString() == "(Select All)")[ "chkBox"] = _checkedCount == count; Loading = false; } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }