Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Обновление datagrid / 13 сообщений из 13, страница 1 из 1
21.03.2012, 15:19
    #37715939
Miad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление datagrid
Посмотрел, что тема обновления данных какого либо элемента частенько всплывает на форме, но почитав нужного мне ответа не нашел, или не смог понять. В данном направлении я еще очень новичок, поэтому прошу помощи, арзобраться.

На странице есть 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
21.03.2012, 15:44
    #37716000
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление datagrid
Miad,

у твоего класса, который представляет данные, реализуй интерфейс IEditableObject.
...
Рейтинг: 0 / 0
21.03.2012, 16:34
    #37716120
Miad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление datagrid
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
21.03.2012, 16:35
    #37716125
Miad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление datagrid
не помогло
...
Рейтинг: 0 / 0
21.03.2012, 17:36
    #37716310
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление datagrid
Miad,

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

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

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

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

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

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

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

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

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


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