Проблема с обновлением данных datagrid

83
20 января 2021, 09:30

Всем привет. Программа для проведения соревнований. Интерфейс WPF, СУБД SQLite. Список участников реализован с помощью datagrid.

                    <DataGrid Style="{StaticResource ResourceKey= DoubleClickOpen}" x:Name="MembersDG" DataContext="{Binding Path = Member}" HorizontalAlignment="Left" Height="891" Margin="0,71,0,0" VerticalAlignment="Top" Width="1262" Loaded="DG_Load" ColumnWidth="*" HeadersVisibility="Column" CanUserReorderColumns="False" IsReadOnly="True" AutoGenerateColumns="False" Background="#FFD7D7D7" PreviewKeyDown="DeleteRecord">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="ФИО" Binding="{Binding Path=ФИО}"/>
                        <DataGridTextColumn Header="Дата рождения" Binding="{Binding Path=ДатаРождения}"/>
                        <DataGridTextColumn Header="Контактные данные" Binding="{Binding Path=Контакты}"/>
                        <DataGridTextColumn Header="Клуб" Binding="{Binding Path=Клуб}"/>
                        <DataGridTextColumn Header="Тренер" Binding="{Binding Path=Тренер}"/>
                        <DataGridTextColumn Header="Квалификация" Binding="{Binding Path=Квалификация}"/>
                        <DataGridTextColumn Header="Основной вид спорта" Binding="{Binding Path=ОсновнойВидСпорта}"/>
                        <DataGridTextColumn Header="Примечания" Binding="{Binding Path=Примечания}"/>
                    </DataGrid.Columns>
                </DataGrid>

В таблице разрешена сортировка (в свойствах datagrid галочка CanUserSortColumns). Если таблица не отсортирована, то при добавлении/удалении участников таблица обновляется (участники сразу добавляются и удаляются), а если отсортировать таблицу (тык на хедер любого столбца) то таблица не обновляется - добавленный элемент отображается только после повторной сортировки, и после удаления элемент остается видимым, а удаляется из таблицы также после повторной сортировки.

Класс участников:

    public class Member
    {
    public string ФИО { get; set; }
    public string ДатаРождения { get; set; }
    public string Контакты { get; set; }
    public string Клуб { get; set; }
    public string Тренер { get; set; }
    public string Квалификация { get; set; }
    public string ОсновнойВидСпорта { get; set; }
    public string Примечания { get; set; }
    public Member(string name, string bornDate, string contacts, string club, string trainer, string cvalification, string mainSportType, string description)
    {
        ФИО = name;
        ДатаРождения = bornDate;
        Контакты = contacts;
        Клуб = club;
        Тренер = trainer;
        Квалификация = cvalification;
        ОсновнойВидСпорта = mainSportType;
        Примечания = description;
    }
}

Если перед добавлением/удалением элементов прописать:

    dataGrid.Items.SortDescriptions.Clear();

то обновление работает нормально, но использовать это не всегда удобно, например мне всегда нужно отображать список отсортированный по фамильно по алфавиту.

Обновление делаю так:

            SQLiteCommand cmd = new SQLiteCommand(sql, connection);
            using (SQLiteDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                     members.Add(new Member(reader[0].ToString(), reader[1].ToString(), reader[2].ToString(), reader[3].ToString(), reader[4].ToString(), reader[5].ToString(), reader[6].ToString(), reader[7].ToString()));
                }
            }
            dataGrid.ItemsSource = members;
            dataGrid.Items.

Это моя криворукость или баг wpf? Как сделать так что бы сортировка не влияла на обновление.

Answer 1

Прошло много времени и я исправил.
Вместо List<> нужно использовать ObservableCollection.

Спасибо всем кто помог)!

READ ALSO
Постфиксный декремент

Постфиксный декремент

большая просьба помочь разобраться со следующим примером:

116
Удалить подстроку c#

Удалить подстроку c#

Текст самого задания: Отредактировать заданное предложение, удаляя из него все слова с нечетными номерами и переворачивая слова с четными...

98
Как сделать выборку MySQL чтобы значения в колонке содержали значения из списка

Как сделать выборку MySQL чтобы значения в колонке содержали значения из списка

Есть 2 таблицы, из одной я могу выбрать список нужных мне id:

110
Изменение значения в элемента в массиве

Изменение значения в элемента в массиве

Подскажите пожалуйста, есть код, в этом коде, происходит разложение текста в массив, после чего идет проверка текста с изменением его согласно...

126