2014-11-21 3 views
0

좋은 날에 데이터베이스에서 데이터를 가져 오기, 내가 클래스콤보 상자와 그 값의 C#을

classid | class 
1   JSS 1 
2   JSS 2 
3   JSS 3 
4   SSS 1 
5   SSS 2 
6   SSS 3 

내 콤보 상자에서 내 데이터베이스에서 테이블을 가지고, 내가 클래스 열을 가져 및 클래스에 값을 설정 폼이로드, 그는 JSS이 떠나 콤보 상자에 JSS (1)을 표시 할 때 ID,하지만 지금은 - SSS를 3

이 당신은 루프 FO이없는 내 코드

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Solutions\Desktop\My Work\ExamProject\Project DataBase File For Exam\EExamDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"); 
bool classHaveBeenAdded = false; 

void ClassCombo()  
     try 
     { 
      con = new SqlConnection(Properties.Settings.Default.MyConnection); 
      cmd = new SqlCommand("SELECT * FROM Classes", con); 
      cmd.Connection.Open(); 
      SqlDataReader readClass = cmd.ExecuteReader(); 
      ArrayList ClassList = new ArrayList(); 
      if (readClass.Read()) 
      { 
       ClassList.Add(new AddValue(readClass.GetString(1), readClass.GetInt32(0))); 
      } 
      readClass.Close(); 
      cmd.Connection.Close(); 

      this.comboBoxClassID.DataSource = ClassList; 
      this.comboBoxClassID.DisplayMember = "Display"; 
      this.comboBoxClassID.ValueMember = "Value"; 
      classHaveBeenAdded = true; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 

    public class AddValue 
    { 
     public string m_Display; 
     public int m_Value; 

     public AddValue(string Display, int Value) 
     { 
      m_Display = Display; 
      m_Value = Value; 
     } 

     public string Display 
     { 
      get { return m_Display; } 
     } 

     public int Value 
     { 
      get { return m_Value; } 
     } 
    } 
+0

당신은 당신의 콤보 상자에서 단 하나의 값을 얻고있다 ??? – yash

+0

국경을 지키지 마십시오. 해결했습니다. 나는 대신에 사용했습니다. –

+0

코드 검토 비트 : [using using] (http://www.hanselman.com/blog/WhyTheUsingStatementIsBetterThanASharpStickInTheEyeAndASqlConnectionRefactoringExample.aspx); 그렇게하면 try/catch를 덤프 할 수 있습니다. 'm_Display'와'm_Value'는 private이어야합니다. 매개 변수는 Camelcase 여야합니다 :'AddValue (string display, int value)'. ArrayList를 사용하는 이유는 무엇입니까? 'List '? – BCdotWEB

답변

1

입니다 R 데이터베이스에서 값을 읽기 :

if (readClass.Read()) 
{ 
    ClassList.Add(new AddValue(readClass.GetString(1), readClass.GetInt32(0))); 
} 

가 있어야한다 :

while (readClass.Read()) 
{ 
    ClassList.Add(new AddValue(readClass.GetString(1), readClass.GetInt32(0))); 
} 
+0

고마워요. 아주 많이 .... 축복이 남아 있습니다. –

0

이 시도 : -

void ClassCombo()  
    try 
    { 
     con = new SqlConnection(Properties.Settings.Default.MyConnection); 
     cmd = new SqlCommand("SELECT * FROM Classes", con); 
     cmd.Connection.Open(); 
     SqlDataReader readClass = cmd.ExecuteReader(); 
     ArrayList ClassList = new ArrayList(); 
     int i=0; 
     while (readClass.Read()) 
     { 
      ClassList.Add(readClass["class"].ToString()); 
      i++; 
     } 
     readClass.Close(); 
     cmd.Connection.Close(); 

     this.comboBoxClassID.DataSource = ClassList; 
     this.comboBoxClassID.DisplayMember = "Display"; 
     this.comboBoxClassID.ValueMember = "Value"; 
     classHaveBeenAdded = true; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 
+0

네 .. 고마워요. –

관련 문제