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パラメータ名: index"}

したがって、 for ループ where i <=lstQuestion.Count()に何か関係があると思います。

i<=lstQuestion.Count()- 2 、

動作しますが、最後の 2 つのレコードが表示されず、21 ではなく 19 のレコードが表示されます。

21 レコードすべてを表示するように for ループを変更するにはどうすればよいですか?

現在のループにいるときに次のループ値を見つける必要があるため、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 に答える