1

我在 wpf c# 中执行此操作,我正在尝试从数据库中填充一些记录。有 21 条记录。

这是我的代码的样子:

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 条记录,但是我收到了这个错误:

{"索引超出范围。必须为非负数且小于集合的大小。\r\n参数名称:索引"}

所以,我想与i <=lstQuestion.Count()的 for 循环有关。

我试图把i<=lstQuestion.Count()-2

它有效,但不显示最后 2 条记录,它显示 19 条记录而不是 21 条。

如何更改 for 循环以显示所有 21 条记录?

我不能使用 foreach 循环,因为我需要在当前循环中找到下一个循环值。

4

1 回答 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)
    ...
于 2013-07-31T02:14:22.253 回答