2013-07-31 163 views
1

我正在這樣做的WPF c#,我想從數據庫中填充一些記錄。有21條記錄。C#for循環顯示所有記錄

這裏是我的代碼看起來像:

private void PopulateQuestion(int activityID, int taskID) 
{ 
    IList<ModelSQL.question> lstQuestion = qn.GetRecords(taskID, activityID); 

    for(int i= 0 ; i<=lstQuestion.Count()-1; i++) 
    { 
     TextBlock tb = new TextBlock(); 
     tb.FontSize = 19; 
     tb.FontWeight = FontWeights.Bold; 
     tb.Text = lstQuestion[i].QuestionContent; 
     tb.TextWrapping = TextWrapping.WrapWithOverflow; 
     wrapPanel1.Children.Add(tb); 

     TextBox tbox = new TextBox(); 
     if (lstQuestion[i].Answer.Trim().Length > 0) 
     { 
      tbox.FontSize = 19; 
      tbox.Width = 100; 
      tbox.Height = 40; 
      tbox.PreviewDrop += new DragEventHandler(tbox_PreviewDrop); 
      tbox.Focusable = false; // Disallow user to input anything into it. 
      wrapPanel1.Children.Add(tbox); 
     } 
     answers.Add(lstQuestion[i].Answer); 

     if (lstQuestion[i].QuestionNo != lstQuestion[i + 1].QuestionNo) 
     { 
      StackPanel sp = new StackPanel(); 
      sp.Width = 1010; 
      // wrapPanel1.Children.Add(sp); 
      Label spacing = new Label(); 
      spacing.Width = 1038; 
      spacing.Content = ""; 
      wrapPanel1.Children.Add(spacing); 
     } 

    } // end of for each loop. 
} 

我不知道什麼是相關的,哪些不是,所以我只是張貼了部分在for循環的謊言。該lstQuestion.Count()有21項罪名是從數據庫21分的記錄,但我得到這個錯誤:

{"Index was out of range. Must be non-negative and less than the size of the collection.\r\nParameter name: index"}

所以,我想的東西得到了與做for循環,其中我< = lstQuestion.Count()

我試圖把我< = lstQuestion.Count() - 2

它的工作原理,但它不顯示最後2個記錄,它會顯示19條記錄,而不是21

如何更改for循環以顯示所有21條記錄?

我不能使用foreach循環,因爲我需要在當前循環中找到下一個循環值。

+0

檢查此行。 'if(lstQuestion [i] .QuestionNo!= lstQuestion [i + 1] .QuestionNo)' 當我達到20時會發生什麼?並且您嘗試將它與第21張唱片進行比較! – Nilesh

+1

順便說一句,當你得到一個異常時,仔細看看堆棧跟蹤,它可能會指出導致問題的線路。 –

回答

7

它拋出的異常:

if (lstQuestion[i].QuestionNo != lstQuestion[i + 1].QuestionNo) 

當您到達最後的(21)記錄,它試圖來比較22日,不存在。

您需要決定在循環的最後一次迭代中應該發生什麼。至少,像這樣:

if (i + 1 < lstQuestion.Count()) 
{ 
    if (lstQuestion[i].QuestionNo != lstQuestion[i + 1].QuestionNo) 
    ...