JC Carmo Ответов: 1

Вопрос о каскадных комбо-боксах 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);
            }
        }

    }
}

Richard MacCutchan

Вам нужно использовать отладчик, чтобы узнать, что происходит.

[no name]

Да, вам нужно научиться пользоваться отладчиком и начать думать о том, что именно вы пытаетесь сделать. Например, почему вы преобразуете целое число в строку только для того, чтобы преобразовать его обратно в целое число? Есть ли в этом смысл?

José Amílcar Casimiro

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

1 Ответов

Рейтинг:
6

manu_dhobale

Это рабочий код, пожалуйста, взгляните.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form4 : Form
    {
        public Form4()
        {
            InitializeComponent();
        }

        private void Form4_Load(object sender, EventArgs e)
        {
            refreshCurso();

        }
        
        SqlConnection con = new SqlConnection(@"Data Source=mymachine\SQLEXPRESS;Initial Catalog=MyTestDB;Integrated Security=True");
        DataRow dr;

        public void refreshCurso()
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("select  * from curso", 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 modulo 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 turma 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_1(object sender, EventArgs e)
        {
            if (comboBox1.SelectedValue.ToString() != "")
            {
                int cod_curso = Convert.ToInt32(comboBox1.SelectedValue.ToString());
                refreshModulo(cod_curso);
            }
        }

        private void comboBox2_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            if (comboBox2.SelectedValue.ToString() != "")
            {
                int cod_modulo = Convert.ToInt32(comboBox2.SelectedValue.ToString());
                refreshTurma(cod_modulo);
            }
        }
              
    }
}


JC Carmo

Привет, Ману! Большое вам спасибо за вашу помощь! Проблема решена! Ваш код работал отлично! :Д