2015-02-05 97 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; 
相關問題