2017-10-11 91 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。这意味着如果第一个条件为真,则不会检查第二个条件,这不会影响此代码,因为这两个条件是相互排斥的。 –

相关问题