У третьего каскадного поля со списком проблемы с отображением записей

#c# #combobox

#c# #поле со списком

Вопрос:

Я начинающий программист, разрабатывающий решение C # WinForms в VS 2015.

Мне удалось каскадировать два из трех списков со списком. Проблема связана с третьим полем со списком, в котором не отображаются правильные отфильтрованные значения. Он всегда отображает одни и те же значения.

Не могли бы вы взглянуть на мой код и сказать мне, что не так? Я действительно ценю ваше время и помощь. Спасибо!

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Bremington
{
    public partial class Form1 : Form
    {

        SqlConnection con = new SqlConnection(@;"Data Source=LAPTOP-C30IHOU2;Initial Catalog=BremingtonBackEnd;Integrated Security=True");
        DataRow dr;

        public Form1()
        {
            InitializeComponent();
            refreshCurso();
        }

        public void refreshCurso()
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from cursos", con);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            con.Close();
            dr = dt.NewRow();
            dt.Rows.InsertAt(dr, 0);
            comboBox1.ValueMember = "cod_curso";
            comboBox1.DisplayMember = "curso";
            comboBox1.DataSource = dt;
        }

        public void refreshModulo(int cod_curso)
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from modulos where cod_curso= @cod_curso", con);
            cmd.Parameters.AddWithValue("cod_curso", cod_curso);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            con.Close();
            dr = dt.NewRow();
            dt.Rows.InsertAt(dr, 0);
            comboBox2.ValueMember = "cod_modulo";
            comboBox2.DisplayMember = "modulo";
            comboBox2.DataSource = dt;
        }

        public void refreshTurma(int cod_modulo)
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("select * from turmas where cod_modulo= @cod_modulo", con);
            cmd.Parameters.AddWithValue("cod_modulo", cod_modulo);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            con.Close();
            dr = dt.NewRow();
            dt.Rows.InsertAt(dr, 0);
            comboBox3.ValueMember = "cod_turma";
            comboBox3.DisplayMember = "turma";
            comboBox3.DataSource = dt;
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex.ToString() != null)
            {
                int cod_curso = Convert.ToInt32(comboBox1.SelectedIndex.ToString());
                refreshModulo(cod_curso);
            }
        }

        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox2.SelectedIndex.ToString() != null)
            {
                int cod_modulo = Convert.ToInt32(comboBox2.SelectedIndex.ToString());
                refreshTurma(cod_modulo);
            }
        }

    }
}
  

Комментарии:

1. где у вас третье comboBox3_SelectedIndexChanged событие?

2. На несвязанной ноте, разве это не Convert.ToInt32(comboBox2.SelectedIndex.ToString()) то же самое, что comboBox2.SelectedIndex) ?

3. Тот же вопрос. Где третье поле со списком?

4. Поскольку вы новичок, я дам вам лучший совет, который я могу: научитесь отлаживать. Поставьте точки останова, чтобы следовать за исключением кода, и таким образом вы сможете увидеть, что происходит. В вашем случае я бы поставил точку останова в refreshTurma методе, чтобы посмотреть, достигнет ли она и что cod_modulo вы получаете

5. ComboBox3 является последним полем со списком в цикле, поэтому я подумал, что ему не нужно событие SelectedIndexChanged…