private void RestoreView(DataGrid dataGrid, Dictionary <string, List <ColumnSettings> > storage) { var settings = storage.GetValueOrDefault(dataGrid.Name); if (settings == null) { return; } foreach (var column in settings.OrderBy(c => c.DisplayIndex)) { column.Restore(dataGrid, dataGrid.Columns); } var sorted = settings.FirstOrDefault(x => x.SortDirection != null); if (sorted != null) { var column = DataGridHelper.FindColumn(dataGrid, sorted.Name); if (column != null) { foreach (var gridColumn in dataGrid.Columns) { gridColumn.SortDirection = null; } column.SortDirection = sorted.SortDirection; dataGrid.Items.SortDescriptions.Clear(); dataGrid.Items.SortDescriptions.Add(new SortDescription(column.SortMemberPath, column.SortDirection.Value)); } } foreach (var column in dataGrid.Columns.Where(c => !settings.Select(s => s.Name).Contains(DataGridHelper.GetHeader(c)))) { column.DisplayIndex = dataGrid.Columns.IndexOf(column); } }
public void Save_column_sort() { var model = new OrdersViewModel(); UseWindow(model, async(w, view) => { var tabs = view.Descendants <TabControl>().First(); tabs.SelectedItem = tabs.Items[1]; var grid = (DataGrid)((TabItem)tabs.Items[1]).Content; await grid.WaitLoaded(); var column = DataGridHelper.FindColumn(grid.Columns, "Прайс-лист"); column.SortDirection = ListSortDirection.Ascending; Close(model); }); model = new OrdersViewModel(); UseWindow(model, async(w, view) => { var tabs = view.Descendants <TabControl>().First(); tabs.SelectedItem = tabs.Items[1]; var grid = (DataGrid)((TabItem)tabs.Items[1]).Content; await grid.WaitLoaded(); var column = DataGridHelper.FindColumn(grid.Columns, "Прайс-лист"); Assert.AreEqual(ListSortDirection.Ascending, column.SortDirection); }); }
public void Highlight_current_address() { restore = true; session.DeleteEach <SentOrder>(); address = new Address { Name = "Тестовый адрес доставки" }; session.Save(address); MakeSentOrder(); var model = new OrdersViewModel(); UseWindow(model, async(w, view) => { var all = view.Descendants <CheckBox>().First(c => c.Name == "All"); Assert.That(all.Visibility, Is.EqualTo(Visibility.Visible)); all.IsChecked = true; scheduler.Start(); var tabs = view.Descendants <TabControl>().First(); tabs.SelectedItem = tabs.Items[1]; scheduler.Start(); var grid = (DataGrid)((TabItem)tabs.Items[1]).Content; await grid.WaitLoaded(); var column = DataGridHelper.FindColumn(grid.Columns, "Адрес заказа"); var cell = grid.Descendants <DataGridCell>().First(x => x.Column == column); var text = cell.Descendants <TextBlock>().First(); Assert.AreEqual(FontWeights.Bold, text.FontWeight); }); }
private void RestoreView(DataGrid dataGrid, Dictionary <string, List <ColumnSettings> > storage) { var settings = storage.GetValueOrDefault(GetViewKey(dataGrid)); if (settings == null) { return; } //набор колонок для которых производится восстановление и сохраненный набор колонок //могут отличаться тк ui может захотеть удалить какую нибудь колонку //в этом случае //в начале с0 с1 с2 с3 ui удалил колонку с1 с2 с3 пользователь поменял местами с2 с1 с3 //получим сохраненные значения с1-1 с2-0 с3-2 //восстановление с0 с1 с2 с3 //шаг1 (с1 и так 1 ничего не поменялось) - с0 с1 с2 с3 //шаг2 (у с2 0 ставим его вперед все сдвигаем)- с2 с0 с1 с3 //шаг3 (у с3 2 ставим на место с1, с1 сдвигаем)- с2 с0 с3 с1 //после того как ui удалит колонку получится с2 с3 с1 те с3 и с1 поменялись местами что не верно //если колонки обновлять в порядки отображения то слева от текущей позиции будут младшие колонки в правильном //порядке а справа старшие но порядок будет неправильный и отображаться будет верный порядок вне зависимости //от удаления колонок foreach (var column in settings.OrderBy(c => c.DisplayIndex)) { column.Restore(dataGrid, dataGrid.Columns); } //восстанавливаем порядок сортировки //нужно сбросить маркер для всех колонок в ручную тк //dataGrid.Items.SortDescriptions.Clear(); делает это только для колонок которые отсортированы с //помощью SortDescriptions если сортировка по умолчанию делается при выборке а колонке просто назначается маркер //сортировка не будет сброшена var sorted = settings.FirstOrDefault(x => x.SortDirection != null); if (sorted != null) { var column = DataGridHelper.FindColumn(dataGrid, sorted.Name); if (column != null) { foreach (var gridColumn in dataGrid.Columns) { gridColumn.SortDirection = null; } column.SortDirection = sorted.SortDirection; dataGrid.Items.SortDescriptions.Clear(); dataGrid.Items.SortDescriptions.Add(new SortDescription(column.SortMemberPath, column.SortDirection.Value)); } } //тк новые колонки не имеют сохраненных настроек //они окажутся в конце таблицы //назначаем им индексы из значений по умолчанию foreach (var column in dataGrid.Columns.Where(c => !settings.Select(s => s.Name).Contains(DataGridHelper.GetHeader(c)))) { column.DisplayIndex = dataGrid.Columns.IndexOf(column); } }
//это хак, тк дата биндинг не работает для DataGridColumn //это фактически его эмуляция private static void ShowAddressColumnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var grid = (DataGrid2)d; var column = DataGridHelper.FindColumn(grid.Columns, "Адрес заказа") ?? grid.AddressColumn; if (column == null) { return; } column.Visibility = (bool)e.NewValue ? Visibility.Visible : Visibility.Collapsed; }
public void Check_sending_retail_info() { restore = true; var order = session.Query <Order>().FirstOrDefault(); if (order == null) { var address = session.Query <Address>().FirstOrDefault(); if (address == null) { address = new Address { Name = "Тестовый адрес доставки" }; session.Save(address); } var price = session.Query <Price>().FirstOrDefault(); if (price == null) { price = new Price("тест"); session.Save(price); } var offer = session.Query <Offer>().FirstOrDefault(r => r.Price == price); if (offer == null) { offer = new Offer(price, 100); session.Save(offer); } order = new Order(address, offer); session.Save(order); } var model = new OrderDetailsViewModel(order); model.User.SendRetailMarkup = true; UseWindow(model, async(w, view) => { var grid = view.Descendants <DataGrid>().First(c => c.Name == "Lines"); var column = DataGridHelper.FindColumn(grid.Columns, "Розничная наценка"); Assert.IsNotNull(column); }); user.SendRetailMarkup = false; model = new OrderDetailsViewModel(order); model.User.SendRetailMarkup = false; UseWindow(model, async(w, view) => { var grid = view.Descendants <DataGrid>().First(c => c.Name == "Lines"); var column = DataGridHelper.FindColumn(grid.Columns, "Розничная наценка"); Assert.IsNull(column); }); }
// #60345 скрыть колонку Статус, если клиенту не включена опция складского учета private void HideStatus(object view) { if (User.IsStockEnabled) { return; } foreach (var grid in GetDataGrids(view)) { var column = DataGridHelper.FindColumn(grid.Columns, "Статус"); if (column != null) { column.Visibility = Visibility.Collapsed; } } }
public async Task Current_address_visivility() { restore = true; Fixture <LocalAddress>(); StartWait(); Click("ShowOrderLines"); var lines = await ViewLoaded <OrderLinesViewModel>(); Assert.IsFalse(lines.AddressSelector.All.Value); WaitIdle(); dispatcher.Invoke(() => { var view = (FrameworkElement)lines.GetView(); var box = Find <CheckBox>(view, "AddressSelector", "All"); Assert.IsFalse(box.IsChecked.Value); var grid = (DataGrid)view.FindName("Lines"); var column = DataGridHelper.FindColumn(grid.Columns, "Адрес заказа"); Assert.AreEqual(Visibility.Collapsed, column.Visibility); }); WaitIdle(); dispatcher.Invoke(() => { var view = (FrameworkElement)lines.GetView(); var box = Find <CheckBox>(view, "AddressSelector", "All"); box.IsChecked = true; var grid = (DataGrid)view.FindName("Lines"); var column = DataGridHelper.FindColumn(grid, "Адрес заказа"); Assert.IsTrue(box.IsChecked.Value); Assert.IsTrue(lines.AddressSelector.All.Value); Assert.AreEqual(Visibility.Visible, column.Visibility); box.IsChecked = false; }); Click("ShowOrders"); Click("ShowOrderLines"); lines = await ViewLoaded <OrderLinesViewModel>(); dispatcher.Invoke(() => { var view = (FrameworkElement)lines.GetView(); var box = Find <CheckBox>(view, "AddressSelector", "All"); Assert.IsFalse(box.IsChecked.Value); var grid = (DataGrid)view.FindName("Lines"); var column = DataGridHelper.FindColumn(grid, "Адрес заказа"); Assert.AreEqual(Visibility.Collapsed, column.Visibility); }); }
public void Restore(DataGrid grid, ObservableCollection <DataGridColumn> columns) { var column = DataGridHelper.FindColumn(columns, Name); if (column == null) { return; } column.Width = Width; if (Name != "Адрес заказа") { column.Visibility = Visible; } //мы не можем установить неопределенный индекс или больше максимально индекса if (DisplayIndex >= 0 && DisplayIndex <= columns.Count - 1) { column.DisplayIndex = DisplayIndex; } }
public static void AutoEditOnDigit(DataGrid2 grid, string name) { var column = DataGridHelper.FindColumn(grid.Columns, name); grid.TextInput += (sender, args) => { if (grid.SelectedItem == null) { return; } var isDigit = args.Text.All(Char.IsDigit); if (!isDigit) { return; } args.Handled = true; grid.CurrentCell = new DataGridCellInfo(grid.SelectedItem, column); grid.BeginEdit(args); }; }
public OrdersView() { InitializeComponent(); Loaded += (sender, args) => { ApplyStyles(); }; DataContextChanged += (sender, args) => { var model = DataContext as OrdersViewModel; if (model != null) { if (!model.User.HaveLimits) { Orders.Columns.Remove(DataGridHelper.FindColumn(Orders, "Лимит")); } } }; Orders.CommandBindings.Add(new CommandBinding(DataGrid.DeleteCommand, Commands.DoInvokeViewModel, Commands.CanInvokeViewModel)); SentOrders.CommandBindings.Add(new CommandBinding(DataGrid.DeleteCommand, Commands.DoInvokeViewModel, Commands.CanInvokeViewModel)); DeletedOrders.CommandBindings.Add(new CommandBinding(DataGrid.DeleteCommand, Commands.DoInvokeViewModel, Commands.CanInvokeViewModel)); Orders.ItemSourceChanged += (sender, args) => { var collection = Orders.ItemsSource as ReactiveCollection <Order>; if (collection != null) { ordersRef.Disposable = collection.ItemChanged.Throttle(TimeSpan.FromMilliseconds(100), DispatcherScheduler.Current) .Subscribe(_ => { ((IEditableCollectionView)Orders.Items).CommitEdit(); Orders.Items.Refresh(); }); } }; }
public void Show_address_column() { restore = true; session.Save(new Address { Name = "Тестовый адрес доставки" }); var model = new OrdersViewModel(); UseWindow(model, async(w, view) => { var all = view.Descendants <CheckBox>().First(c => c.Name == "All"); Assert.That(all.Visibility, Is.EqualTo(Visibility.Visible)); var grid = view.Descendants <DataGrid>().First(c => c.Name == "Orders"); var column = DataGridHelper.FindColumn(grid.Columns, "Адрес заказа"); Assert.That(column.Visibility, Is.EqualTo(Visibility.Collapsed)); model.AddressSelector.All.Value = true; Assert.That(column.Visibility, Is.EqualTo(Visibility.Visible)); }); }
public OrderDetailsView() { InitializeComponent(); Loaded += (sender, args) => { ApplyStyles(); var context = (OrderDetailsViewModel)DataContext; if (!context.User.SendRetailMarkup) { var col = DataGridHelper.FindColumn(Lines, "Розничная наценка"); Lines.Columns.Remove(col); col = DataGridHelper.FindColumn(Lines, "Розничная цена"); Lines.Columns.Remove(col); DataGridHelper.CalculateColumnWidths(Lines); } else { Lines.IsReadOnly = !context.IsCurrentOrder; } }; DataContextChanged += (sender, args) => { var model = DataContext as OrderDetailsViewModel; if (model != null) { if (!model.IsCurrentOrder || !model.User.HaveLimits) { Lines.Columns.Remove(DataGridHelper.FindColumn(Lines, "Эффективность")); } } }; Lines.CommandBindings.Add(new CommandBinding(DataGrid.DeleteCommand, Commands.DoInvokeViewModel, Commands.CanInvokeViewModel)); DataGridHelper.CalculateColumnWidths(Lines); new Editable().Attach(Lines); }
public void Show_address() { restore = true; session.Save(new Address("Тестовый адрес доставки")); session.DeleteEach <BatchLine>(); session.Save(new BatchLine(session.Query <Catalog>().First(), address) { Comment = "test comment", Properties = "Клубничный", }); WpfTestHelper.WithWindow2(async w => { var model = new Batch(); var view = Bind(model); w.Content = view; await view.WaitLoaded(); var searchCheck = view.Descendants <CheckBox>().First(c => c.Name == "All"); searchCheck.IsChecked = true; var grid = view.Descendants <DataGrid>().First(c => c.Name == "ReportLines"); scheduler.Start(); grid.CurrentItem = grid.Items[0]; await view.WaitIdle(); var col = DataGridHelper.FindColumn(grid, "Адрес заказа"); Assert.AreEqual(col.Visibility, Visibility.Visible); var comment = view.Descendants <TextBox>().First(c => c.Name == "CurrentReportLine_Value_Comment"); Assert.AreEqual("test comment", comment.Text); col = DataGridHelper.FindColumn(grid, "Кат.свойства"); col.Visibility = Visibility.Visible; await view.WaitIdle(); var cell = grid.Descendants <DataGridCell>().First(x => x.Column == col); Assert.AreEqual("Клубничный", cell.Descendants <TextBlock>().First().Text); }); }
private void EditCell(DataGrid grid, string column, int row, string text) { EditCell(grid, DataGridHelper.FindColumn(grid, column).DisplayIndex, row, text); }
private DataGridCell GetCell(DataGrid grid, string name, int row = 0) { var column = DataGridHelper.FindColumn(grid, name); return(GetCell(grid, column.DisplayIndex, row)); }