希望有人可以提供帮助。我有一个从数据库中获取的对象列表。 我想加载,只将列表中的前十个添加到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();
}
希望有人理解我的意思并且可以提供帮助,请提前感谢您,如果您需要,请随时向我提问。 这都在更新面板中。
最后,这是复选框列表在显示时的外观:
答案 0 :(得分:2)
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.