Я новичок в WPF, и я был далеко от C # в течение многих лет. Я использовал для разработки моих основных графических интерфейсов на WindowsForms. В любом случае, я не могу понять, как обновить сетку данных из комбинации двух комбинированных списков.
Вот обзор.
Каждый комбинированный список имеет свой собственный DataTable, такой же случай с DataGrid.
Когда я выбираю элемент в ComboboxA, ComboBoxB должен отображать результат своего запроса в зависимости от того, что я выбрал в ComboBox A, а DataGrid будет заполнен результатом запроса из комбинации 2 выбранных элементов в каждом ComboBox. ,
Вот чего я достиг.
Я могу выбрать любой элемент в ComboboxA и получить все элементы для ComboBoxB в зависимости от того, что я выбрал. Я кодировал, чтобы отображать только первый индекс ComboboxB каждый раз, когда нажимаю на любой элемент в ComboboxA, и тогда он заполняет мою таблицу данных. Давайте назовем это регистром по умолчанию.
Но, когда я хочу выбрать элемент из ComboBox A и хочу выбрать другой элемент, который отличается от индекса по умолчанию [0], из ComboboxB и отобразить результат этой комбинации в моей DataGrid, мой код аварии.
Мне удалось отобразить содержимое моего выпадающего списка B в зависимости от элемента, выбранного в comboboxA, однако я также хочу отобразить данные из моей DataGrid в зависимости от того, что я выбрал в своем выпадающем списке B.
Примечание:
Если я добавлю код в событие ComboboxBSelectionChanged, регистр по умолчанию не будет работать, поскольку он всегда будет возвращать нулевое значение.
Вот мой код:
private void Cmb_LineNames_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (string.IsNullOrEmpty(cmb_LineNames.SelectedValue.ToString()))
{
MessageBox.Show("Empty Value. Select a valid line.");
}
else
{
cmb_SelectYear.Items.Clear();
linename = cmb_LineNames.SelectedValue.ToString();
syDT = dataHandler.GetCurrentYear(linename);
selectedYear = dataHandler.fillSelectedYearCmb(syDT,cmb_SelectYear);
if(selectedYear != 0)
{
mcDT = dataHandler.GetMountedComponentsPerLine(linename, selectedYear);
dataHandler.DisplayMountedComponents(mcDT, dgvMountedComponents);
}
}
}
private void Cmb_SelectYear_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//int selectYear = 0;
//selectYear = int.Parse(cmb_SelectYear.SelectedItem.ToString());
//mcDT = dataHandler.GetMountedComponentsPerLine(linename, selectYear);
//dataHandler.DisplayMountedComponents(mcDT, dgvMountedComponents);
}
dataHandlerClass, который имеет метод Fill для ComboboxB
public int fillSelectedYearCmb(ScrapIDataSet.SelectYearDataTable yearRows, ComboBox cmbBox)
{
int selectedYear = 0;
for (int i = 0; i < yearRows.Count; i++)
{
cmbBox.Items.Add(yearRows.Rows[i]["Year"]);
}
cmbBox.SelectedIndex = 0;
selectedYear = int.Parse(cmbBox.SelectedValue.ToString());
return selectedYear;
}
public void DisplayMountedComponents(ScrapIDataSet.MountedComponentsPerLineDataTable mountedComponentsPerLineRows, DataGrid dataGridMC)
{
for (int i = 0; i < mountedComponentsPerLineRows.Rows.Count; i++)
{
dataGridMC.DataContext = mountedComponentsPerLineRows.DefaultView;
}
}
ComboboxA is cmb_LineNames
ComboboxB - cmb_SelectYear
Любая помощь приветствуется. Спасибо