仅显示列表中的 10 个结果,然后单击按钮显示下 10 个结果

Displaying only 10 results from a list and the next 10 with button click

希望有人能提供帮助。我有一个从数据库中获取的对象列表。 我想加载时,只将列表中的前十个添加到 CheckBoxlist。然后用 Next_click 我想添加下十个等等。如果用户点击 Prev,我想添加前 10 个。所以本质上它是通过 CheckBoxlist 进行分页。

这是我试过的方法,但没有成功,它没有抛出任何错误。只是不做我想让它做的事。希望可以。

在页面加载时声明:

    QuestionHandler quest = null;
    protected List<QuestionView> questions = null;
    int countP1 = 0;
    int countP2 = 10;  

这是绑定数据方法:

   CheckBoxList1.Items.Clear();
        questions = quest.GetQuestions();
        List<string> display = new List<string>();
        int c = 0;
        foreach (QuestionView qsD in questions)
        {
            if (countP1.ToString().All(char.IsDigit) && countP2.ToString().All(char.IsDigit))
            {
                if (c >= countP1 && c <= countP2)
                {
                    display.Add(qsD.QuestionID.ToString());
                }                  
                c++;
            }
        }
        questions = null;
        questions = new List<QuestionView>();
        foreach(string s in display)
        {
            QuestionView q = new QuestionView();
            q = quest.GetSelectQ(s);
            questions.Add(q);
        }

然后将其添加到复选框列表(不用担心长字符串,它是预制的 table):

     foreach (QuestionView qs in questions)
        {
            ListItem item1 = new ListItem();
            item1.Text = "<table class=\"table\" style=\"border: 3px solid #8AC007;\"><tr><td>Title: </td><td width=\"300px\">" + qs.Title + "</td><td>|</td><td>Marks: </td><td width=\"300px\">" + qs.Mark + "</td><td>|</td><td>Type: </td><td width=\"300px\">" + qs.TypeID + "</td></tr><tr><td>Subject:</td><td>" + qs.SubjectID + "</td><td>|</td><td>Topic: </td><td>" + qs.TopicID + "</td><td>|</td><td>Rating: </td><td></td></tr></table>";
            item1.Value = qs.QuestionID.ToString();
            CheckBoxList1.Items.Add(item1);
        }

下次点击:

    protected void btnNext_Click(object sender, EventArgs e)
    {            
        countP1 = countP1 + 10;
        countP2 = countP2 + 10;
        BindData();
    }

上次点击:

     protected void btnPrev_Click(object sender, EventArgs e)
    {
        countP1 = countP1 - 10;
        countP2 = countP2 - 10;
        BindData();
    }

希望有人明白我的意思并能提供帮助,在此先感谢您,如果需要,请随时向我提问。 这一切都在 update-panel.

最后,这是复选框列表显示时的样子:

您可以使用 LINQ 和方法 Take and Skip

const int size = 10; // How many questions you want to be returned.

public IEnumerable<QuestionView> GetQuestions(int page) 
{
    return questions.Skip(size * page).Take(size);
}

这将查看您的 QuestionView 列表,跳过 10 条记录 * 页数,然后获取接下来的 10 个元素。

您可能想要添加一些额外的逻辑以确保请求的下一组元素不超过 QuestionView 列表限制。

来自您的评论:

为简单起见,您可以将该方法放在您正在使用的 class 中,并可以在 DataBinding 方法中调用它(您有以下代码):

CheckBoxList1.Items.Clear();
questions = quest.GetQuestions();
var pagedQuestions = GetQuestions(1); // Make use of the new method. 

为了获得最佳实践,您应该将其分开并将其放在与 QuestionView 相关的位置。您也可以将其作为 Question View 的扩展(扩展方法)。

在 Darren 的帮助下,这是使其工作的最终代码:

加载页面的绑定数据方法:

    CheckBoxList1.Items.Clear();
        questions = quest.GetQuestions();
        int count = 0;
        foreach (QuestionView qs in questions)
        {
            if(count<10) //stop it from displaying more than 10 on the first page
            {
                ListItem item1 = new ListItem();
                item1.Text = "<table class=\"table\" style=\"border: 3px solid #8AC007;\"><tr><td>Title: </td><td width=\"300px\">" + qs.Title + "</td><td>|</td><td>Marks: </td><td width=\"300px\">" + qs.Mark + "</td><td>|</td><td>Type: </td><td width=\"300px\">" + qs.TypeID + "</td></tr><tr><td>Subject:</td><td>" + qs.SubjectID + "</td><td>|</td><td>Topic: </td><td>" + qs.TopicID + "</td><td>|</td><td>Rating: </td><td></td></tr></table>";
                item1.Value = qs.QuestionID.ToString();
                CheckBoxList1.Items.Add(item1);
            }
            count++;                
        }

下次点击:

    countP1++;
        CheckBoxList1.Items.Clear();
        questions = quest.GetQuestions();
        var pagedQuestions = GetQuestions(countP1);
        foreach (QuestionView qs in pagedQuestions)
        {
            ListItem item1 = new ListItem();
            item1.Text = "<table class=\"table\" style=\"border: 3px solid #8AC007;\"><tr><td>Title: </td><td width=\"300px\">" + qs.Title + "</td><td>|</td><td>Marks: </td><td width=\"300px\">" + qs.Mark + "</td><td>|</td><td>Type: </td><td width=\"300px\">" + qs.TypeID + "</td></tr><tr><td>Subject:</td><td>" + qs.SubjectID + "</td><td>|</td><td>Topic: </td><td>" + qs.TopicID + "</td><td>|</td><td>Rating: </td><td></td></tr></table>";
            item1.Value = qs.QuestionID.ToString();
            CheckBoxList1.Items.Add(item1);
        }

上次点击:

    countP1--;
        CheckBoxList1.Items.Clear();
        questions = quest.GetQuestions();
        var pagedQuestions = GetQuestions(countP1);
        foreach (QuestionView qs in pagedQuestions)
        {
            ListItem item1 = new ListItem();
            item1.Text = "<table class=\"table\" style=\"border: 3px solid #8AC007;\"><tr><td>Title: </td><td width=\"300px\">" + qs.Title + "</td><td>|</td><td>Marks: </td><td width=\"300px\">" + qs.Mark + "</td><td>|</td><td>Type: </td><td width=\"300px\">" + qs.TypeID + "</td></tr><tr><td>Subject:</td><td>" + qs.SubjectID + "</td><td>|</td><td>Topic: </td><td>" + qs.TopicID + "</td><td>|</td><td>Rating: </td><td></td></tr></table>";
            item1.Value = qs.QuestionID.ToString();
            CheckBoxList1.Items.Add(item1);
        }

页面加载时计数变量初始化为 0。