Добрый день, подскажите как обновить табличку по клику на кнопку:
К примеру есть таблица в которую выводятся значения из БД, я вешаю обработчик на кнопку, который должен удалить одну запись из этой таблицы, вот таким способом:
MySqlCommand query = new MySqlCommand("SQL ZAPROS", connection);
connection.Open();
MySqlDataReader query_result = query.ExecuteReader();
connection.Close();
Что можно дописать, чтобы после выполнения этого кода контент динамически обновился? То есть запись сразу исчезла.
Решил сам, просто нужно было обновить коллекцию к которой был привязан вывод из БД.
Решение: Класс в котором все это происходит реализует интерфейс 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 = "-"; // Решение
}
}
Не знаю на сколько оно правильное, но проблему это решило.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, только начала изучать C#, столкнулся с такой проблемой
Здравствуйте, уважаемыеС помощью ответов из предыдущего вопроса я немного усовершенствовал свой код