2017-10-11 102 views
-1

顯示來自數據庫(MS Access)的數據,我希望在所選數據的末尾顯示另一個表格。我試過如果使用循環如何使用C#顯示數據庫的下一個數據?

private void btnNext_Click(object sender, EventArgs e) //**This will select the next row** 
{ 
    currentRow++; 
    nextRow(); 
} 

private void nextRow() 
{ 
    if (currentRow <= n) 
    { //**Randomize the RadioButtons.Text** 
     var row = dTable.Rows[currentRow]; 
     List<string> list = new List<string> { row["C1"].ToString(), row["C2"].ToString(), row["C3"].ToString(), row["C4"].ToString() }; 
     lblQuest.Text = row["QUESTION"].ToString(); 
     btn1.Text = row["C1"].ToString(); 
     btn2.Text = row["C2"].ToString(); 
     btn3.Text = row["C3"].ToString(); 
     btn4.Text = row["C4"].ToString(); 
     var ans = row["ANSWER"].ToString(); 
     var rbtn = new[] { btn1, btn2, btn3, btn4 }; 
     var rnd = new Random(); 
     var shuffTxt = list.OrderBy(x => rnd.Next(list.Count)).ToList(); 
     for (int i = 0; i < rbtn.Length; i++) 
     { 
      rbtn[i].Text = shuffTxt[i]; 
     } 
    } 
    if (currentRow > n) 
    { //**If the currentRow is already greater than the n selected rows, it will display a form** 
     frmPIPE frm = new frmPIPE(); 
     frm.Show(); 
     Hide(); 
    } 
} 

但是當currentRow > n;它顯示一個錯誤

「沒有排位置n」

+0

你的意思是'frmPIPE frm = new frmPIPE();'這一行會引發這個錯誤?! )。即使沒有該代碼,也可以使用 –

+0

。當currentRow大於行數時會產生錯誤。 –

+0

at var row = dTable.Rows [currentRow]; –

回答

1

我不知道這是否與基於0索引做的,你需要改變你的代碼:

if (currentRow < n) 
... 
else if (currentRow >= n) 
+0

這解決了我的問題。謝謝。但爲什麼> =條件工作時,我只需要它大於?這讓我感到困惑。 –

+0

嗯,我不熟悉你的代碼的全部內容,但是使用基於0的索引,假設你有一組排序,[23,34,45],如果你要求位置/索引2處的值,你會得到45,如果你要求位置/索引3的值,你會得到一個類似於你發佈的錯誤信息。所以它是基於0的,這意味着如果您要求位置/索引0處的值,則會得到23(第一個值)。同樣,如果你有一個包含50行的結果集/表,它們將被索引爲0-49,因此索引50處的行將引發異常。 –

+0

我也修改了我的代碼,說第二個語句是else if而不是if。這意味着如果第一個條件爲真,則不會檢查第二個條件,這不會影響此代碼,因爲這兩個條件是相互排斥的。 –

相關問題