仅显示列表中的 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.
中
最后,这是复选框列表显示时的样子:
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。
希望有人能提供帮助。我有一个从数据库中获取的对象列表。 我想加载时,只将列表中的前十个添加到 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.
中最后,这是复选框列表显示时的样子:
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。