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

时间:2015-10-11 10:20:32

标签: c# asp.net list updatepanel checkboxlist

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

这就是我尝试过的方式并没有成功,但它并没有抛出任何错误。只是没有做我想做的事。我希望它可能。

在页面加载时,这些声明为:

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

这是binddata方法:

   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);
        }

然后将它添加到checkboxlist(不要担心长字符串,它是一个预制表):

     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();
    }

prev click:

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

希望有人理解我的意思并且可以提供帮助,请提前感谢您,如果您需要,请随时向我提问。 这都在更新面板中。

最后,这是复选框列表在显示时的外观: Display

2 个答案:

答案 0 :(得分:2)

您可以使用LINQ以及方法TakeSkip

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列表限制。

来自您的评论:

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

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

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

答案 1 :(得分:0)

在达伦的帮助下,这是使其成功的最终代码:

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

    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);
        }

prev click:

    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);
        }

当页面加载时,count变量将启动为0.