2015-02-05 33 views
1

我想填充两个不同的列表,我正在从数据库中读取两个不同的列表。这里是我的代码:只有两个列表框中的一个正在填充按钮点击

private void StartSchedule_Click(object sender, EventArgs e) 
    { 
     string ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\A2 Computing\C# Programming Project\TriHard.accdb"; 
     string SelectQuery = "SELECT Time.AthleteID, Athlete.AthleteName, Time.EventTime, Event.EventDistance FROM Event INNER JOIN (Athlete INNER JOIN [Time] ON Athlete.[AthleteID] = Time.[AthleteID]) ON Event.[EventID] = Time.[EventID];"; 
     OleDbConnection Connection = new OleDbConnection(ConnectionString); 
     OleDbCommand Command = new OleDbCommand(SelectQuery, Connection); 
     Command.Connection.Open(); 
     OleDbDataReader Reader = Command.ExecuteReader(CommandBehavior.CloseConnection); 

     PaceCalculator pace = new PaceCalculator(); 


     List<PaceCalculator> Distancelist = new List<PaceCalculator>(); 
     while (Reader.Read()) 
     { 
      pace = new PaceCalculator(); 
      pace.Distance = (int)Reader["EventDistance"]; 
      Distancelist.Add(pace); 
     } 


     listBox1.DisplayMember = "Distance"; 
     listBox1.DataSource = Distancelist; 

     List<PaceCalculator> TimeList = new List<PaceCalculator>(); 
     while (Reader.Read()) 
     { 
      pace = new PaceCalculator(); 
      pace.Time = (string)Reader["EventTime"]; 
      TimeList.Add(pace); 
     } 

     listBox2.DisplayMember = "Time"; 
     listBox2.DataSource = TimeList; 






    } 

当我按下按钮时,listBox1被填充,但listBox2不是。我该如何解决这个问题,因为两个盒子都是相邻的?

+0

我认为你缺少一条线。在该代码中,第二个列表框将从零开始读取(因为前一个已经读取了所有内容)。 – BradleyDotNET 2015-02-05 18:31:34

+0

@BradleyDotNET我将如何去改变它? – 2015-02-05 18:32:18

+1

将pace.Time和TimeList放在第一个while循环中。就是这样,或者你用另一个Command对象创建另一个Reader。您需要使用{}块来处理它们。现在,你不关闭你的数据库连接等。 – LarsTech 2015-02-05 18:33:01

回答

1

OleDbDataReader提供了一种在正向模式下从底层数据库读取数据的方法。所以,当你到达循环结束时,你不能重新启动它,希望再次从你的数据的init中读取。
因此,只需从数据源中读取距离和时间值并将它们添加到单个PaceCalculator对象实例并将其添加到列表即可。所有这一切都在一个循环内。

当你退出循环,只要将列表框的DataSource两个不同的列表,并设置不同的DisplayMember性质

List<PaceCalculator> TimeList = new List<PaceCalculator>(); 
    List<PaceCalculator> Distancelist = new List<PaceCalculator>(); 
    while (Reader.Read()) 
    { 
     pace = new PaceCalculator(); 
     pace.Distance = (int)Reader["EventDistance"]; 
     pace.Time = (string)Reader["EventTime"]; 
     Distancelist.Add(pace); 
     TimeList.Add(pace); 
    } 

    listBox1.DisplayMember = "Distance"; 
    listBox1.DataSource = Distancelist; 
    listBox2.DisplayMember = "Time"; 
    listBox2.DataSource = TimeList; 
相关问题