У меня есть comboBox и checkListBox в моем приложении для форм Windows, которое связано с моей базой данных SQL. Я получил часть данных привязки, но я не уверен, как показать данные в checkListBox, когда выбран элемент comboBox. Скажем, у меня есть 10 элементов в моем comboBox, которые привязываются к моей базе данных SQL, и они находятся под именем столбца («имя приложения»), например excel, word, android, eclipse и т. Д. ... Я вызываю этот метод, когда начинается форма загружать. Извините за длинный код.Как отображать элементы в CheckListBox от ComboBox
Вот мой код для этого applicationComboBox
private void loadComboBox()
{
myConn = new SqlConnection("Server = localhost; Initial Catalog= dbName; Trusted_Connection = True");
try
{
myConn.Open();
//my table name is Application_Detail
string query = "select * from Application_Detail";
myCommand = new SqlCommand(query, myConn);
//reading the value from the query
SqlDataReader dr = myCommand.ExecuteReader();
//Reading all the value one by one
while (dr.Read())
{
//column is 1 in Application_Detail Data
//GetString(1) display the 2nd column of the table
string name = dr.GetString(1);
//display the application name in column 2 -
applicationComboBox.Items.Add(name);
}
myConn.Close();
}catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
исхода этой части коды:
//label Name //Application Name
Application Name:
Excel
Word
NotePad
PowerPoint
SubLime
Eclipse
После того как я называю этот метод, я хочу, чтобы отобразить имя учителей что соответствует тому, что пользователь выбрал в этом applicationComboBox
. Поэтому, если учитель 1,2,3 использует Excel и пользователь выбрал excel из comboBox, checkListBox отобразит учителя 1,2,3 и наоборот. Чтобы сделать это, я вызываю метод в методе comboBox1_SelectedIndexChanged
, потому что я хочу отображать деталь, когда я выбираю элемент из comboBox. Ниже мой код
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
//I check if the comboBox index is at 0, it disable the button.
if (applicationComboBox.SelectedIndex == 0)
{
exportButton.Enabled = false;
this.teacherCheckListBox.DataSource = null;
teacherCheckListBox.Items.Clear();
}
//it it is not at 0,
else
{
exportButton.Enabled = true;
//call this method
fill_checkListBox();
}
//teacherCheckListBox
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void fill_checkListBox()
{
myConn = new SqlConnection("Server = localhost; Initial Catalog= dbName; Trusted_Connection = True");
try
{
myConn.Open();
//for reading purpose, I break down by long statement
//In this statement, I left join 3 table (Teacher_Detail, AppUser_Detail, and Application_Detail table). My AppUser_Detail contains all 3 id (teacherId, applicationId, and AppUserId). I then set filter the table using `where` keyWord to make the applicationId = the comboBox text
string query = "SELECT
td.chineseName,
ad.applicationId,
aud.applicationId,
ad.applicationName
FROM[AppUser_Detail] as aud
LEFT JOIN[Teacher_Detail] as td
ON aud.teacherId = td.teacherId
LEFT JOIN[Application_Detail] as ad
ON aud.applicationId = ad.applicationId
where aud.applicationId = '" + applicationComboBox.Text + "' AND NOT(td.teacherId IS NULL)
";
myCommand = new SqlCommand(query, myConn);
//reading the value from the query
SqlDataReader dr = myCommand.ExecuteReader();
//Reading all the value one by one
while (dr.Read())
{
//column is 0 where the teacherName belong in my Teacher_Detail table
string name = dr.GetString(0);
//I tried to set the text of the checkListBox as the teacherName, but I can't somehow
teacherCheckListBox.Text = name;
}
myConn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Когда я запускаю программу, как это, он сказал Conversion failed when converting the varchar value "Excel" to data type int.
Есть ли способ это исправить? это не должно быть проблемой, потому что в моей таблице Application_Detail мой тип данных applicationName и my teacherName устанавливается как nvarchar (50) и applicationId и teacherId = int;
что тип данных ApplicationID в AppUser_Detail таблице это может быть причиной проблемы. пожалуйста, дайте мне знать –
тип данных 'int' в AppUser_Detail, я установил все ID для int – RedRocket