Как я могу заполнить DataGrid в зависимости от содержимого двух ComboBox? - PullRequest
0 голосов
/ 20 января 2019

Я новичок в 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

Любая помощь приветствуется. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...