2012-03-02 2 views
0

Я ищу, чтобы создать GridView с пейджингом, но пейджинг по-прежнему разрешен. Затем я хотел бы создать свои собственные кнопки подкачки, внешние GridView, и иметь эти страницы через данные. По сути, это создание прокручиваемого gridview с липким пейджером внизу, который я могу настроить, чтобы соответствовать внешнему виду, ощущению и функциональности, требуемым на моем сайте. Кто-нибудь есть идеи о том, как это сделать? Я не нашел много в моем поиске.GridView External Paging

ответ

2

Вы можете использовать ретранслятор с пользовательским поисковым вызовом или определить свой собственный пользовательский элемент управления для этого требования. Проверьте this article о том, как это сделать с помощью регулятора ретранслятора. Update: This может помочь

UpdateFixed headers, Client side pagination using jQuery

+0

Я бы предпочел использовать предварительно упакованные функции с помощью GridView, так как это выглядит довольно быстро. Возможно ли это сделать/я ошибаюсь в отношении производительности? – steventnorris

+0

Repeater - широко используемый элемент управления. О какой производительности вы имеете в виду? Производительность будет сильно зависеть от вашего запроса к базе данных (сколько записей вы извлекаете), или вы имеете в виду клиент мудрый? (обновил мой ответ с помощью пользовательского пейджинга для gridview), хотя для этого может потребоваться много работы. –

+0

Возможно, это поможет прояснить, что я ищу. Мне нужна сортировка по всему набору данных, разбивке на страницы и скорости отображения данных (может быть и большой набор данных, возможно, несколько 1000 записей). Заголовок/сортировка и нижний колонтитул/разбивка на страницы должны быть «липкими» относительно таблицы данных центра, которая будет прокручиваться. Я рассматривал кешированный ответ вместо SQL-тяги на каждой странице/сортировке, и я считаю, что GridView обрабатывает. Кроме того, GridView обрабатывает другие функции, кроме липкой головки/ноги. Имеет ли репитер эти функции? – steventnorris

2

Я знаю, этот вопрос был дан ответ, и это действительно стара, но у меня было много проблем с этим и не нашли принятый ответ полностью полезен, главным образом потому, что я не хотел создавать новый элемент управления.

Я нашел, что вы можете сделать это довольно легко на самом деле, и вот как.

Я создал свое gridview внутри обновленной панели. Я загружаю данные для сетки нажатием кнопки Я не показываю, а затем помещаю объект данных в viewstate. Затем я добавляю pagerSetting как таковой:

<PagerSettings Mode="NextPreviousFirstLast" Visible="false" /> 

Затем я добавил 4 кнопки, метку и текстовое поле в DIV, который я выбрал, чтобы выставить на сервер:

<div runat="server" id="divPageControls" style="width:100%;margin-bottom:1%;margin-top:1%;display:none;"> 
     <asp:Button runat="server" ID="btnFirst" Text="First" CssClass="ReOrderButtons" UseSubmitBehavior="false" />&nbsp; 
     <asp:Button runat="server" ID="btnPrev" Text="Previous" CssClass="ReOrderButtons" UseSubmitBehavior="false" />&nbsp; 
     <asp:Button runat="server" ID="btnNext" Text="Next" CssClass="ReOrderButtons" UseSubmitBehavior="false" />&nbsp; 
     <asp:Button runat="server" ID="btnLast" Text="Last" CssClass="ReOrderButtons" UseSubmitBehavior="false" />&nbsp;<br /><br /> 
     <asp:TextBox runat="server" ID="txtPageIndex" AutoPostBack="true" CssClass="priceQuote_TextBoxStyle" style="margin-left:20px;float:none;width:4%;text-align:center;" ></asp:TextBox>&nbsp;<asp:Label runat="server" ID="lblOfPages"></asp:Label> 
    </div> 

Теперь все было в место, все, что мне нужно было сделать, это добавить обработчики событий.

Protected Sub btnFirst_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFirst.Click 
     _mainView.PageIndex = 0 
     _mainView_PageIndexChanging(_mainView, New System.Web.UI.WebControls.GridViewPageEventArgs(_mainView.PageIndex)) 
    End Sub 

    Protected Sub btnLast_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLast.Click 
     _mainView.PageIndex = _mainView.PageCount - 1 
     _mainView_PageIndexChanging(_mainView, New System.Web.UI.WebControls.GridViewPageEventArgs(_mainView.PageIndex)) 
    End Sub 

    Protected Sub btnPrev_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrev.Click 
     _mainView.PageIndex -= 1 
     _mainView_PageIndexChanging(_mainView, New System.Web.UI.WebControls.GridViewPageEventArgs(_mainView.PageIndex)) 
    End Sub 

    Protected Sub btnNext_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnNext.Click 
     _mainView.PageIndex += 1 
     _mainView_PageIndexChanging(_mainView, New System.Web.UI.WebControls.GridViewPageEventArgs(_mainView.PageIndex)) 
    End Sub 

    Protected Sub txtPageIndex_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtPageIndex.TextChanged 
     If fromInternal = False Then 
      If txtPageIndex.Text <> "" And IsNumeric(txtPageIndex.Text) Then 
       If CInt(txtPageIndex.Text - 1) < _mainView.PageCount - 1 And CInt(txtPageIndex.Text - 1) >= 0 Then 
        _mainView.PageIndex = CInt(txtPageIndex.Text - 1) 
        _mainView_PageIndexChanging(_mainView, New System.Web.UI.WebControls.GridViewPageEventArgs(_mainView.PageIndex)) 
       End If 
      End If 
     End If 
    End Sub 

    Protected Sub _mainView_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles _mainView.PageIndexChanging 
     _mainView.PageIndex = e.NewPageIndex 
     _mainView.DataSource = ViewState("currProducts") 
     _mainView.DataBind() 
    End Sub 

    Protected Sub _mainView_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles _mainView.DataBound 
     If _mainView.PageCount > 1 Then 
      divPageControls.Style("display") = "block" 

      If _mainView.PageIndex = 0 Then 
       btnFirst.Style("display") = "none" 
       btnPrev.Style("display") = "none" 
       btnLast.Style("display") = "inline" 
       btnNext.Style("display") = "inline" 
      ElseIf _mainView.PageIndex > 0 And _mainView.PageIndex < _mainView.PageCount - 1 Then 
       btnFirst.Style("display") = "inline" 
       btnPrev.Style("display") = "inline" 
       btnLast.Style("display") = "inline" 
       btnNext.Style("display") = "inline" 
      ElseIf _mainView.PageIndex = _mainView.PageCount - 1 Then 
       btnLast.Style("display") = "none" 
       btnNext.Style("display") = "none" 
       btnFirst.Style("display") = "inline" 
       btnPrev.Style("display") = "inline" 
      End If 

      fromInternal = True 
      txtPageIndex.Text = CStr(_mainView.PageIndex + 1) 
      lblOfPages.Text = "of " & CStr(_mainView.PageCount - 1) 

     End If 
    End Sub 

После всего, что при нажатии на кнопки индекс странице girdview был изменен, а затем передается в PageIndexChanging случае представления. Это прекрасно работает для меня, и я надеюсь, что кто-то другой сможет его использовать.

Помните, что я не показывал триггеры асинхронизации панели обновления или любые другие нюансы, однако я не думаю, что они необходимы для подкачки, если вы не используете панель обновления, такую ​​как я.