Esempio n. 1
0
        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);
            }
        }
Esempio n. 5
0
        //это хак, тк дата биндинг не работает для 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);
            });
        }
Esempio n. 9
0
        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;
            }
        }
Esempio n. 10
0
        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();
                    });
                }
            };
        }
Esempio n. 12
0
        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));
            });
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        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);
            });
        }
Esempio n. 15
0
 private void EditCell(DataGrid grid, string column, int row, string text)
 {
     EditCell(grid, DataGridHelper.FindColumn(grid, column).DisplayIndex, row, text);
 }
Esempio n. 16
0
        private DataGridCell GetCell(DataGrid grid, string name, int row = 0)
        {
            var column = DataGridHelper.FindColumn(grid, name);

            return(GetCell(grid, column.DisplayIndex, row));
        }