Как обновлять или сбросить выбранные данные в связанных combobox?
Есть 3 связанных combobox имеющих привязку к бд. В кажом combobox прописан linq запрос, с выборкой данных в бд. При выборе данных в 1 combobox происходит сортировка с помощью linq запроса и результат выборки предаётся во 2 combobox по аналогии данные из 2 прередаются в 3 combobox. Допустим я хочу изменить выбор в 1 combobox, как сделать так, чтобы данные сбросились из 2 и 3?
public void Ser_CPU_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ser = Ser_CPU.SelectedItem.ToString();
ser = ser.Remove(0, 11);
ser = ser.Replace("}", "");
var query3 = (
from CPU in dataEntities.CPU
where CPU.Manufacturer == proizvod && CPU.Series == ser
select new { CPU.Soket }).Distinct();
Sok_CPU.ItemsSource = query3.ToList();
}
public void Sok_CPU_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
sok = Sok_CPU.SelectedItem.ToString();
sok = sok.Remove(0, 10);
sok = sok.Replace("}", "");
var query4 = (
from CPU in dataEntities.CPU
where CPU.Manufacturer == proizvod && CPU.Series == ser && CPU.Soket == sok
select new { CPU.Model_CPU }).Distinct();
Mod_CPU.ItemsSource = query4.ToList();
}
public void Mod_CPU_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
kod = Mod_CPU.SelectedItem.ToString();
kod = kod.Remove(0, 14);
kod = kod.Replace("}", "");
var query5 = (
from CPU in dataEntities.CPU
where CPU.Manufacturer == proizvod && CPU.Series == ser && CPU.Soket == sok && CPU.Model_CPU == kod
select new {CPU.Energy_consumption }).Distinct();
Energy_CPU.ItemsSource = query5.ToList();
}
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Попробуйте вот так, это спровоцирует вызов обработчика SelectionChanged у целевого комбобокса.
Sok_CPU.ItemsSource = query3.ToList();
Sok_CPU.SelectedIndex = 0;
Обновление
Так как ваше решение не гибкое, а в комментариях вы указали формат данных { MOD_CPU=3600 }, я попробовал реализовать универсальную функцию обновления комбобоксов. Проверяйте.
private void UpdateCombo(ComboBox currentCombo, ComboBox nextCombo)
{
string text = currentCombo.SelectedItem?.ToString().Split('=')[1].Trim().Split('}')[0].Trim() ?? "";
if (text.Length > 0)
{
IEnumerable<object> query;
switch (nextCombo.Name)
{
case nameof(Sok_CPU):
ser = text;
query = (
from CPU in dataEntities.CPU
where CPU.Manufacturer == proizvod && CPU.Series == ser
select new { CPU.Soket }).Distinct();
nextCombo.ItemsSource = query.ToList();
UpdateCombo(nextCombo, Mod_CPU); // рекурсия для обновления по цепочке
break;
case nameof(Mod_CPU):
sok = text;
query = (
from CPU in dataEntities.CPU
where CPU.Manufacturer == proizvod && CPU.Series == ser && CPU.Soket == sok
select new { CPU.Model_CPU }).Distinct();
nextCombo.ItemsSource = query.ToList();
UpdateCombo(nextCombo, Energy_CPU);
break;
case nameof(Energy_CPU):
kod = text;
query = (
from CPU in dataEntities.CPU
where CPU.Manufacturer == proizvod && CPU.Series == ser && CPU.Soket == sok && CPU.Model_CPU == kod
select new { CPU.Energy_consumption }).Distinct();
nextCombo.ItemsSource = query.ToList();
break;
default:
query = Array.Empty<object>();
break;
}
}
}
public void Ser_CPU_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
UpdateCombo(Ser_CPU, Sok_CPU);
}
public void Sok_CPU_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
UpdateCombo(Sok_CPU, Mod_CPU);
}
public void Mod_CPU_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
UpdateCombo(Mod_CPU, Energy_CPU);
}