Обновить после добавления в БД (MySQL)

364
13 февраля 2017, 13:24

Добрый день, подскажите как обновить табличку по клику на кнопку:

К примеру есть таблица в которую выводятся значения из БД, я вешаю обработчик на кнопку, который должен удалить одну запись из этой таблицы, вот таким способом:

 MySqlCommand query = new MySqlCommand("SQL ZAPROS", connection);
            connection.Open();
            MySqlDataReader query_result = query.ExecuteReader();
            connection.Close();

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

Answer 1

Решил сам, просто нужно было обновить коллекцию к которой был привязан вывод из БД.

Решение: Класс в котором все это происходит реализует интерфейс INotifyPropertyChanged Элемент в XAML разметке:

<ListView x:Name="contains" ItemsSource="{Binding ItemsForContains}" SelectedItem="{Binding SelectedItemsContains}">
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding UserLogin}"/>
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel>
                                    <Image x:Name="clear" Style="{StaticResource image}" MouseLeftButtonUp="clearProf_MouseLeftButtonUp" ToolTip="Очистить" Source="images/clear.png"></Image> // Кнопка
                                </StackPanel>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>

Свойства:

public ObservableCollection<Contains> ItemsForContains { get; set; }
    private Contains _SelectedItemsContains;
    public Contains SelectedItemsContains
    {
        get { return _SelectedItemsContains; }
        set
        {
            _SelectedItemsContains = value; RaisePropertyChanged();
        }
    }

Реализaция INotifyPropertyChanged:

protected void RaisePropertyChanged([CallerMemberName] string propertyName = null) =>
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    public event PropertyChangedEventHandler PropertyChanged;

Вывод из БД был таков:

ItemsForContains = new ObservableCollection<Contains>();
        connection.Open();
        MySqlCommand contains = new MySqlCommand("SELECT * FROM groups WHERE groupId='" + id + "' LIMIT " + num, connection); // выборка из БД MySQL
        MySqlDataReader contains_result = contains.ExecuteReader();
        if (contains_result.HasRows)
        {
            while (contains_result.Read()) // заполняем коллекцию в цикле
            {
                ItemsForContains.Add( 
                    new Contains()
                    {
                        CId = contains_result["id"].ToString(),
                        UserId = contains_result["userId"].ToString(),
                        UserLogin = contains_result["userLogin"].ToString()
                    });
            }
            connection.Close();
        }

Действие с базой:

private void clear_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) // обработчик клика по кнопке, кнопка находится внутри SelectedItemsContains
    {
        if (SelectedItemsContains != null) // SelectedItemsContains - выбранный элемент коллекции (привязан к SelectedIndex).
        {
            string connectionString = "SERVER = localhost; DATABASE = root; UID = vbnz; PASSWORD = ;";
            MySqlConnection connection = new MySqlConnection(connectionString);
            MySqlCommand query = new MySqlCommand("UPDATE groups SET userLogin = '-' WHERE id = '" + SelectedItemsContains.CId + "' LIMIT 1", connection);
            connection.Open();
            MySqlDataReader query_result = query.ExecuteReader();
            connection.Close();
            Cursor = Cursors.Wait;
            Thread.Sleep(300);
            Cursor = Cursors.Arrow;
            SelectedItemsContains.UserLogin = "-"; // Решение
        }
    }

Не знаю на сколько оно правильное, но проблему это решило.

READ ALSO
Не удается записать в ListView

Не удается записать в ListView

Есть класс, содержащий строку String и целое число int

314
Доступ к массиву из другого класса

Доступ к массиву из другого класса

Здравствуйте, только начала изучать C#, столкнулся с такой проблемой

451
Есть проблема с \t

Есть проблема с \t

Здравствуйте, уважаемыеС помощью ответов из предыдущего вопроса я немного усовершенствовал свой код

284