2014-11-21 60 views
0

美好的一天,我有一个表在我的数据库获取从数据库中的数据为组合框,并将其值C#

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

在我的组合框,我拿来类列,并将其值设置为类ID,但现在当窗体加载,它只是显示在组合框中留下JSS 2 JSS 1 - SSS 3.

这是我的代码

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 2014-11-21 12:38:11

+0

不要我已经解决了它。我用,而不是一会儿。 – 2014-11-21 12:58:29

+0

位代码审查:[use using](http://www.hanselman.com/blog/WhyTheUsingStatementIsBetterThanASharpStickInTheEyeAndASqlConnectionRefactoringExample.aspx);这样你可以转储try/catch。 'm_Display'和'm_Value'应该是私有的。参数应该是camelcase:'AddValue(string display,int value)'。为什么要使用'ArrayList'而不是一个通用的集合,例如'列表'? – BCdotWEB 2014-11-21 13:00:43

回答

1

你没有一个循环FO [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

非常感谢....保持祝福 – 2014-12-01 19:24:08

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

是的..也谢谢你... – 2014-12-01 19:24:36

相关问题