Вопрос о каскадных комбо-боксах 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
Можете ли вы добавить базу данных модели?
Мне кажется, у вас есть проблема с моделью данных.