2015-10-11 5 views
1

Надеюсь, кто-то может помочь. У меня есть список объектов, которые я получаю из БД. Я бы хотел, чтобы добавить только первую десятку в список CheckBoxlist. Затем с Next_click я хотел бы добавить следующие десять и так далее. Если пользователь нажимает кнопку Prev, я хотел бы добавить предыдущий 10. Таким образом, по существу, это пейджинг через CheckBoxlist.Отображение только 10 результатов из списка и следующих 10 нажатием кнопки

Вот как я пробовал и не добился успеха, он не вызывает никаких ошибок. Просто не делаю то, что хочу. Надеюсь, это возможно.

На странице загрузки они объявлены:

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 (не волнуйтесь о длинной череде, сво Premade таблицы):

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

Надеюсь кто-то понимает, что я имею в виду и может помочь, спасибо заранее, не стесняйтесь задавать мне вопросы об этом, если вам нужно. Все это на панели обновления.

Наконец, это то, как CheckBoxList выглядит при отображении: Display

ответ

2

Вы можете использовать LINQ и методы Take и 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.

Из ваших комментариев:

Для простоты, вы можете поместить метод внутри класса вы работаете, и может вызвать его в методе DataBinding (где у вас есть следующий код):

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

Для лучшей практики вам следует отделить это и поместить его где-нибудь, что связано с QuestionView. Вы также можете указать его как расширение до Question View (метод расширения).

+0

Куда бы я положил это? Вопросы - это список объектов QuestionView. Я никогда не работал с этим синтаксисом, поэтому просто скажу, как вопросы = getquestions (1), а затем вопросы = getquestions (2) для следующей страницы? или я понимаю это неправильно? – Cleaven

+0

@Cleaven - это правильно, я обновил свой ответ, чтобы включить некоторые дополнительные подробности. –

+0

Спасибо за вашу помощь, я уверен, что это сработает :) – Cleaven

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

Предыдущий номер:

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 при загрузке страницы.