2015-09-18 2 views
0

У меня есть 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;

+0

что тип данных ApplicationID в AppUser_Detail таблице это может быть причиной проблемы. пожалуйста, дайте мне знать –

+0

тип данных 'int' в AppUser_Detail, я установил все ID для int – RedRocket

ответ

0

Проблема с этой линии, я бы:

where aud.applicationId = '" + applicationComboBox.Text + 

на основе кода, я думаю, что ApplicationID является ИНТ и applicationComboBox.Text только что, текст.

Попробуйте это:

where ad.applicationName = '" + applicationComboBox.Text.Trim() + 

Попробуйте это:

if (string.IsNullOrWhiteSpace(teacherCheckListBox.FindString(name)) 
{ 
    teacherCheckListBox.Items.Add(name); 
} 
+0

Спасибо за ваш ответ, вы правы, мне интересно, есть ли способ исправить это? Я попробовал '.Text.ToString' и' applicationComboBox.SelectedIndex', но не повезло – RedRocket

+0

Проверьте мой обновленный ответ. – thewisegod

+0

Благодарим вас за ответ, я пробовал ваш ответ, сообщение об ошибке уходит, но он не отображает столбец имен в teacherCheckListBox. Мне интересно, какой метод я буду использовать? Я использовал 'teacherCheckListBox.items.add (name)', но это просто добавляет к нему новое имя, когда я нажимаю на comboBox. Вместо этого я использую 'teacherCheckListBox.DisplayName = name'? или я использую что-то еще? – RedRocket

Смежные вопросы