powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Отслеживание изменений в DataGrid
25 сообщений из 88, страница 3 из 4
Отслеживание изменений в DataGrid
    #39728811
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesЕсть еще вариант ListView, он более легковесный.+1. Но автор молчит на предложение.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728812
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123на ввод каждой буквы. Тебе зачем? Сохраняется запись целиком.Если ты не встречался с юзеркейсом, это не значит, что его не существует
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728813
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЕсть мнение, что WPFОК. Пару лет понаблюдаем.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728814
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728818
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Eld HaspТак как "выловить" изменение ячейки до выхода из неё?на ввод каждой буквы. Тебе зачем? Сохраняется запись целиком.Допустим, пользователь отредактировал только одну только одну ячейку DataGrid (Изменил номер телефона, например). Больше ему ни чего менять не надо. Хочет сохранить. Но кнопка "Сохранить" не активна, так как пользователь ещё не вышел из ячейки.
Конечно, можно сделать кнопку всегда активной. А сохранять только если были изменения. Можно сказать пользователю - "Сначала нажмите Enter" и т.д. Но интересно добиться всё таки желаемого. Хотя бы с познавательной точки зрения.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728819
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЕсли ты не встречался с юзеркейсом, это не значит, что его не существуетплохо видно к чему это.
Запись в табле это обычно сущность.
А сущность частями не сохраняется.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728820
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspНо кнопка "Сохранить" не активна, так как пользователь ещё не вышел из ячейки.не понял. Должна быть активной на вход в редактирование или на ввод одной буквы.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728824
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Roman MejtesЕсть еще вариант ListView, он более легковесный.+1. Но автор молчит на предложение.Я не молчу, а обдумываю. Как быть с новой строкой? Просто явно её добавлять в коллекцию? Коллекцию настроить так, чтобы в ней всегда была одна пустая строка?
Кстати, читал такой вариант для DataGrid. Выловить событие начала редактирования новой строки (PreparingCellForEdit) и по нему явно создать в коллекции новую строку.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728827
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Eld HaspНо кнопка "Сохранить" не активна, так как пользователь ещё не вышел из ячейки.не понял. Должна быть активной на вход в редактирование или на ввод одной буквы.До редактирования кнопка "Сохранить" не активна. При любых изменениях становится активной. Желательно, чтобы изменения "ловились" сразу, до выхода из первой ячейки. Так как иначе создаются неудобства в случае редактирования только одной ячейки - а это будет один из частых используемых способов.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728831
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspPetro123пропущено...
не понял. Должна быть активной на вход в редактирование или на ввод одной буквы.До редактирования кнопка "Сохранить" не активна. При любых изменениях становится активной. Желательно, чтобы изменения "ловились" сразу, до выхода из первой ячейки. Так как иначе создаются неудобства в случае редактирования только одной ячейки - а это будет один из частых используемых способов.я же сказал, событие ввода буквы. А не выход.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728838
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspКак быть с новой строкой?
DataGridTest.Items.Add(
Было?
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728839
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Eld HaspКак быть с новой строкой?
DataGridTest.Items.Add(
Было?Кури внимательно то, что написал Роман. Нет никакого Add
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728840
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Eld Haspпропущено...
До редактирования кнопка "Сохранить" не активна. При любых изменениях становится активной. Желательно, чтобы изменения "ловились" сразу, до выхода из первой ячейки. Так как иначе создаются неудобства в случае редактирования только одной ячейки - а это будет один из частых используемых способов.я же сказал, событие ввода буквы. А не выход.Да, при изменении любого символа, даже если не было выхода.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728842
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Eld HaspКак быть с новой строкой?
DataGridTest.Items.Add(
Было?Нет. Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст? Или Вы что-то другое имели ввиду?
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728843
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspRoman MejtesEld Hasp,

это не буфер, а так называемое представление коллекции (ICollectionView)
для списочных типов используется ListCollectionView, именно там реализован интерфейс IEditableCollectionViewAddNewItem добавление элементов в источник.
Который и поддерживается в DataGrid.
Для любой коллекции в рамках потока существует представление коллекции по умолчанию, через которое работает DataGrid, если источником является класс наследующий IEnumerable, но если создать собственный экземпляр представления и связать его с ItemSource, то будет использоваться именно он.
Представление коллекции так же реализует сортировку, фильтрацию списка, синхронизацию текущего элемента, навигацию и другой функционал.Так как "выловить" изменение ячейки до выхода из неё?
И как быть с новой строкой? Можно ли сделать что-то с этим?
редактируемая ячейка существует только во View, механизм там просто, извлекается значение ячейки, создается ячейка с TextBox, этому TextBox присваивается это значение, а когда вы завершаете редактирование, значение передается в источник. То есть, пока редактирование не завершится, то есть редактируемая ячейка не закроется, получить значение будет довольно геморойно и не особо нужно.

Код: c#
1.
2.
3.
4.
5.
6.
7.
            {
                new Person("Roman", 3),
                new Person("Sofia", 39),
            };

            PersonesView = new ListCollectionView(Persones);
            var i = PersonesView as IEditableCollectionViewAddNewItem;



интерфейс IEditableObject позволит обрабатывать события начала, завершения и отмены редактирования в самом редактируемом объекте модели представления

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
    public class Person : BaseModel, IEditableObject
    {
        //Данный конструктор класса нужен для автоматического создания новый элементов в DataGrid
        public Person() { }

        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }

        public string Name { set; get; }
        public int Age { set; get; }

        public void BeginEdit()
        {
            Debug.Print($"Person: {this} Begin Edit");
        }

        public void CancelEdit() 
        {
            Debug.Print($"Person: {this} Cancel Edit");
        }

        public void EndEdit()
        {
            Debug.Print($"Person: {this} End Edit");
        }

        public override string ToString()
        {
            return $"Person: {Name}, {Age}";
        }
    }


Так же можно отслеживать состояния представления коллекции, примерно следующим образом
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
        
            Persones = new ObservableCollection<Person>()
            {
                new Person("Roman", 3),
                new Person("Sofia", 39),
            };

            PersonesView = new ListCollectionView(Persones);
            if (PersonesView is INotifyPropertyChanged ipc)
            {
                ipc.PropertyChanged += ICV_PropertyChanged;
            }

        private void IECVANI_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (!(sender is IEditableCollectionViewAddNewItem editable)) return;
            Debug.Write($"Changed property '{e.PropertyName}':");
            switch (e.PropertyName)
            {
                    //ADD
                case nameof(IEditableCollectionView.CurrentAddItem):
                    Debug.Write(editable.CurrentAddItem); break;
                case nameof(IEditableCollectionView.IsAddingNew):
                    Debug.Write(editable.IsEditingItem); break;
                case nameof(IEditableCollectionView.CanAddNew):
                    Debug.Write(editable.CanAddNew); break;
                case nameof(IEditableCollectionViewAddNewItem.CanAddNewItem):
                    Debug.Write(editable.CanAddNewItem); break;
                    //EDIT
                case nameof(IEditableCollectionView.CurrentEditItem):
                    Debug.Write(editable.CurrentEditItem);
                    break;
                case nameof(IEditableCollectionView.IsEditingItem):
                    Debug.Write(editable.IsEditingItem); break;
                case nameof(IEditableCollectionView.CanCancelEdit):
                    Debug.Write(editable.CanCancelEdit); break;
                case nameof(IEditableCollectionView.CanRemove):
                    Debug.Write(editable.CanRemove); break;
            }
            Debug.WriteLine(null);

        }
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728845
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspНо если источник прибинден к ItemsSource разве Items.Add исключение не выдаст?проверь. Я удивлюсь.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728846
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
естественно, создавай свой ListCollectionView, именно его и нужно передавать как источник элементов в свойство ItemSource
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728848
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eld HaspНет. Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст? Или Вы что-то другое имели ввиду?был ли топикстартеру полезен хотя бы один пост Петро?
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728849
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProEld HaspНет. Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст? Или Вы что-то другое имели ввиду?был ли топикстартеру полезен хотя бы один пост Петро?партсобрание?
Был ли полезен хоть один твой пост?
Или ты из группы поддержки?
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728850
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне жаль его время
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728852
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProМне жаль его время
А мне жаль когды ты советуешь модифицировать грид)
Почему и говорю - пенсионер.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728856
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesинтерфейс IEditableObject позволит обрабатывать события начала, завершения и отмены редактирования в самом редактируемом объекте модели представления
Спасибо за пример.
Правильно я понял, что это ниже альтернатива, хотя и за деньги?
Код: c#
1.
2.
3.
4.
<telerik:RadGridView BeginningEdit="radGridView_BeginningEdit"
             RowEditEnded="radGridView_RowEditEnded">
    <!--...-->
</telerik:RadGridView>
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728876
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123Eld HaspНо если источник прибинден к ItemsSource разве Items.Add исключение не выдаст?проверь. Я удивлюсь.Проверил - исключение.
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728882
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtesестественно, создавай свой ListCollectionView, именно его и нужно передавать как источник элементов в свойство ItemSourceНе совсем понял пример.

ipc.PropertyChanged += ICV_PropertyChanged;

private void IECVANI_PropertyChanged(object sender, PropertyChangedEventArgs e)

Это описка или речь о разных обработчиках?
...
Рейтинг: 0 / 0
Отслеживание изменений в DataGrid
    #39728883
Eld Hasp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman MejtesEld Haspпропущено...
Так как "выловить" изменение ячейки до выхода из неё?
И как быть с новой строкой? Можно ли сделать что-то с этим?
редактируемая ячейка существует только во View, механизм там просто, извлекается значение ячейки, создается ячейка с TextBox, этому TextBox присваивается это значение, а когда вы завершаете редактирование, значение передается в источник. То есть, пока редактирование не завершится, то есть редактируемая ячейка не закроется, получить значение будет довольно геморойно и не особо нужно.То что геморройно я понял.... Вот такие мелки нюансы в WPF, превращающиеся в геморрой, и удивляют...
...
Рейтинг: 0 / 0
25 сообщений из 88, страница 3 из 4
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Отслеживание изменений в DataGrid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]