powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Обновление datagrid
13 сообщений из 13, страница 1 из 1
Обновление datagrid
    #37715939
Miad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел, что тема обновления данных какого либо элемента частенько всплывает на форме, но почитав нужного мне ответа не нашел, или не смог понять. В данном направлении я еще очень новичок, поэтому прошу помощи, арзобраться.

На странице есть datagrid с данными

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<riaControls:DomainDataSource AutoLoad="True" d:DesignData="{d:DesignInstance my3:pf_company, CreateList=true}" Height="0" LoadedData="pf_companyDomainDataSource_LoadedData" Name="pf_companyDomainDataSource" QueryName="GetPf_companyQuery" Width="0">
            <riaControls:DomainDataSource.DomainContext>
                <my2:UserDomainContext />
            </riaControls:DomainDataSource.DomainContext>
        </riaControls:DomainDataSource>
  <data:DataGrid  
               AutoGenerateColumns="False"              
               IsReadOnly="False" 
               ItemsSource="{Binding ElementName=pf_companyDomainDataSource, Path=Data}"
               Name="dataGrid1" 
               VerticalAlignment = "Stretch" HorizontalAlignment="Stretch" SelectionMode="Single" MouseLeftButtonUp="dataGrid1_MouseLeftButtonUp">
  </data:DataGrid >


рядом кнопка вызывающая дочерние окно, в которое открывает карточку редактирования выбранных в датагриде данных:
Код: 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.
       
        //показываем окно редактирования данных пользователей
        private void EditUserData()
        {
            pf_company pf_companyEdit = (dataGrid1.SelectedItem as pf_company);
            if (pf_companyEdit != null)
            {
                UserDataWindow udw = new UserDataWindow(pf_companyEdit.ID_USER);

                udw.Closed += new EventHandler(udw_Closed);
                udw.Title = "Редактирование данных пользователя";
                udw.Show();
            }
        }
       //сохраняем данные после закрытия окна
       void udw_Closed(object sender, EventArgs e)
        {
            UserDataWindow UDW = (UserDataWindow)sender;
            if (UDW.pf_companyDomainDataSource != null)
            {
                if (UDW.pf_companyDomainDataSource.HasChanges)
                {
                    if (UDW.DialogResult == true)
                    {
                        UDW.pf_companyDomainDataSource.SubmitChanges();
                    }
                    else
                    {
                        UDW.pf_companyDomainDataSource.RejectChanges();
                    }
                }                
            }
        }


По закрытию данные сохраняются, но в гриде не меняются. Подскажите, что делать или хотя бы в каком направлении копать?
...
Рейтинг: 0 / 0
Обновление datagrid
    #37716000
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Miad,

у твоего класса, который представляет данные, реализуй интерфейс IEditableObject.
...
Рейтинг: 0 / 0
Обновление datagrid
    #37716120
Miad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

У DomainService?

Дело в том что данные меняются, но почему-тоне отображаются в датагриде, т.е. после изменения данных я в SelectedItem имею уже изменный объект.
Добавил колонки руками, добавил привязку, в обе стороны
Код: xml
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.
<data:DataGrid  Grid.Row="1"
               AutoGenerateColumns="False"              
               IsReadOnly="True" 
               ItemsSource="{Binding ElementName=pf_companyDomainDataSource, Path=Data}"
               Name="dataGrid1" 
               VerticalAlignment = "Stretch" HorizontalAlignment="Stretch" SelectionMode="Single" MouseLeftButtonUp="dataGrid1_MouseLeftButtonUp">
                <data:DataGrid.Columns>
                    <data:DataGridTextColumn    CanUserResize="True"
                                                CanUserSort="True" 
                                                Binding="{Binding Path=pf_users.Login}" 
                                                Width="Auto" Header="Имя входа"/>
                    <!--<data:DataGridTextColumn    CanUserResize="True"
                                                CanUserSort="True" 
                                                Binding="{Binding Path=pf_users.Password}" 
                                                Width="Auto" Header="Пароль"/>-->
                    <data:DataGridCheckBoxColumn    CanUserResize="True"
                                                    CanUserSort="True" 
                                                    Binding="{Binding Path=pf_users.IsAdmin}" 
                                                    Width="Auto" Header="Администрор"/>
                    <data:DataGridTextColumn     CanUserResize="True"
                                                     CanUserSort="True" 
                                                     Binding="{Binding Path=name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                                                     Width="Auto" Header="Наименование организации"/>
                    <data:DataGridTextColumn     CanUserResize="True"
                                                     CanUserSort="True" 
                                                     Binding="{Binding Path=INN}" 
                                                     Width="Auto" Header="ИНН"/>
                    <data:DataGridTextColumn     CanUserResize="True"
                                                     CanUserSort="True" 
                                                     Binding="{Binding Path=OGRN}" 
                                                     Width="Auto" Header="ОГРН"/>
                </data:DataGrid.Columns>
            </data:DataGrid>



В сервисе добавил обработчик изменения
Код: 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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
 // The MetadataTypeAttribute identifies pf_companyMetadata as the class
    // that carries additional metadata for the pf_company class.
    [MetadataTypeAttribute(typeof(pf_company.pf_companyMetadata))]
    public partial class pf_company
    {

        // This class allows you to attach custom attributes to properties
        // of the pf_company class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        // NotifyPropertyChanged вызовет PropertyChanged когда данные источника изменятся
        // Объявялем событие уведомляющее об измении данных
        
        internal sealed class pf_companyMetadata : INotifyPropertyChanged
        {

            public event PropertyChangedEventHandler PropertyChanged;

            public void EntetyNotifyPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }  

            // Metadata classes are not meant to be instantiated.
            private pf_companyMetadata() 
            {
            }
            [Display(Name = "Начальник отдела")]
            public string Chief { get; set; }
            [Display(Name = "Электронный адрес начальника отдела")]
            public string ChiefEmail { get; set; }
            [Display(Name = "Телефон начальника отдела")]
            public string ChiefPhone { get; set; }
            [Display(Name = "Директор", Order = 7)]
            public string Director { get; set; }
            [Display(Name = "Электронный адрес директора", Order = 9)]
            public string DirectorEmail { get; set; }
            [Display(Name = "Телефон директора", Order = 8)]
            public string DirectorPhone { get; set; }
            [Display(Name = "Фактический адрес")]
            public string FactAdderss { get; set; }

            public int ID { get; set; }

            public int ID_USER { get; set; }

            public string InformAddress { get; set; }
            [Display(Name = "ИНН", Order = 5)]
            public string INN { get; set; }
            [Display(Name = "Юридический адрес")]
            public string JuristicAdderss { get; set; }
            [Display(Name = "КПП")]
            public string KPP { get; set; }
            [Display(Name = "Наименование организации", Order = 4)]
            public string name {
                                    get { return name; }
                                    set
                                    {
                                        name = value;
                                        // Вызывает NotifyPropertyChanged чтобы уведомить представление об измении данных
                                        EntetyNotifyPropertyChanged("name");
                                    }
                                }
            [Display(Name = "ОГРН", Order = 6)]
            public string OGRN { get; set; }
            
            [Include]
            public pf_users pf_users { get; set; }
            [Display(Name = "Электронный адрес пользователя", Order = 12)]
            public string UserEmail { get; set; }
            [Display(Name = "Имя пользователя", Order = 10)]
            public string UserName { get; set; }
            [Display(Name = "Телефон пользователя", Order = 11)]
            public string UserPhone { get; set; }
            
        }
    }
...
...
Рейтинг: 0 / 0
Обновление datagrid
    #37716125
Miad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не помогло
...
Рейтинг: 0 / 0
Обновление datagrid
    #37716310
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Miad,

INotifyPropertyChanged вот это не помогло?
И недолжно было. Кто сказал что поможет?
Где реализация IEditableObject?
...
Рейтинг: 0 / 0
Обновление datagrid
    #37719460
Miad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

У меня поставщиком является риасервис, как у него реализовать IEditableObject?
К тому же данные обновляются, т.е. объекты в гриде уже новые, обновленные, а отображаются как старые.
...
Рейтинг: 0 / 0
Обновление datagrid
    #37719640
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Miad,

у вас свойство name (единственное о изменениях которого вы уведомляете) должно вызывать переполнение стека))) А можно увидеть метод, который данные обновляет в гриде?
...
Рейтинг: 0 / 0
Обновление datagrid
    #37719648
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

а зачем ему Editable? Объект же изменяется на форме, разве не Notify нужен?
...
Рейтинг: 0 / 0
Обновление datagrid
    #37719679
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

так nonitfy нужен там где его ждут.
а collectionview не ждет его. у нее другие интерфейсы для редактирования.
...
Рейтинг: 0 / 0
Обновление datagrid
    #37719694
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexeiK,

эммм, я вкурсе что DataGrid использует внутри CollectionView, но, поверьте, Notify он при этом великоепно обрабатывает.
...
Рейтинг: 0 / 0
Обновление datagrid
    #37719706
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lelouch,

автор не показал форму для редактирования, может он там без биндингов меняет данные, поэтому обсуждение проходит в вакууме.
...
Рейтинг: 0 / 0
Обновление datagrid
    #37719713
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уТКа,

Что то мне кажется что с биндингом или без него - не важно, у него просто объекты коллекции не сообщают гриду что свойства меняются. Какая разница, привязкой или нет...
...
Рейтинг: 0 / 0
Обновление datagrid
    #37719720
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchAlexeiK,

эммм, я вкурсе что DataGrid использует внутри CollectionView, но, поверьте, Notify он при этом великоепно обрабатывает.
ну если поддерижвает и inotify то , да.
я просто не был уверен в inotify.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Обновление datagrid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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