Поскольку это мой первый проект, у меня действительно нет особых идей для его отладки. У меня есть список. Я пишу код вручную, чтобы заполнить список. Поскольку список очень большой, у меня есть кнопка поиска, где пользователь вводит строку поиска. Я пытаюсь построить строку sql отсюда и заполнить список. Все работает нормально, но когда я нажимаю на следующую страницу, она не включает строку поиска. Я думаю, что это просто заполнение 2-й страницы без критериев поиска. Если я удалю управление пейджером данных, он будет работать нормально. Я не могу поместить правильный код datapger_PagePropertiesChanging. Я ценю, если кто-то может помочь мне с этим.

Вот моя разметка представления списка:

         <asp:ListView ID="lvContractors" runat="server" OnPagePropertiesChanging="lvContractors_PagePropertiesChanging">
           <LayoutTemplate>
            <div class="ListViewGrid">
                <table class="tblpadding">
                  <tr>
                      <th class="HeaderStyle">
                           Contractor Number
                      </th>
                      <th class="HeaderStyle">
                           First Name
                      </th>
                      <th class="HeaderStyle">
                           Last Name
                      </th>
                      <th class="HeaderStyle">
                           View
                      </th>
                      <th class="HeaderStyle">
                           Edit
                      </th>
                   </tr>
                   <tbody><asp:PlaceHolder runat="server" ID="itemPlaceholder" /></tbody>

                 </table>
             </div> <!-- End of ListViewGrid -->

             </LayoutTemplate>
             <ItemSeparatorTemplate> <td>   <hr /> </td>

             </ItemSeparatorTemplate>

              <ItemTemplate>
                <div >
                    <tr>
                       <td class="RowStyle"><%#Eval("ContractorNumber")%></td>
                       <td class="RowStyle"><%#Eval("FirstName")%></td>
                       <td class="RowStyle"><%#Eval("LastName")%></td>

                       <td class="RowStyle">
                           <asp:HyperLink ID="lnkView" runat="server" CssClass="link"
                                NavigateUrl='<%# "ContractorEdit.aspx?ID=" + Eval("ContractorNumber") + "&Mode=" + "CV" %>'
                                Target="_blank" Text="View" />
                       </td>
                       <td class="RowStyle">
                          <asp:HyperLink ID="lnkEdit" runat="server" CssClass="link"
                                NavigateUrl= '<%# "ContractorEdit.aspx?ID=" + Eval("ContractorNumber") + "&Mode=" + "CE" %>'
                                Text="Edit"> </asp:HyperLink>

                     </tr>
                  </div>
               </ItemTemplate>
               <AlternatingItemTemplate>
                 <div>
                    <tr>
                       <td class="AlternatingRowStyle"><%#Eval("ContractorNumber")%></td>
                       <td class="AlternatingRowStyle"><%#Eval("FirstName")%></td>
                       <td class="AlternatingRowStyle"><%#Eval("LastName")%></td>

                       <td class="AlternatingRowStyle">
                           <asp:HyperLink ID="lnkView" runat="server" CssClass="link"
                                NavigateUrl='<%# "Contractor.aspx?ID=" + Eval("ContractorNumber")%>'
                                Target="_blank" Text="View" />
                       </td>
                       <td class="AlternatingRowStyle">
                          <asp:HyperLink ID="lnkEdit" runat="server" CssClass="link"
                                NavigateUrl= '<%# "ContractorEdit.aspx?ID=" + Eval("ContractorNumber") + "&Mode=" + "CE" %>'
                                Text="Edit"> </asp:HyperLink>

                     </tr>
                  </div>

               </AlternatingItemTemplate>

               <ItemSeparatorTemplate>
                   <tr>
                      <td colspan="5" class="itemseparator"></td>
                  </tr>
              </ItemSeparatorTemplate>

     </asp:ListView>

     <div class="pager">
        <asp:DataPager PageSize="20" ID="DataPagerContractor" runat="server" PagedControlID="lvContractors"
                        NextPreviousButtonCssClass="PrevNext"
                        CurrentPageLabelCssClass="CurrentPage"
                        NumericButtonCssClass="PageNumber">
            <fields>
                 <asp:NumericPagerField
                      PreviousPageText="&lt; Prev"
                      NextPageText="Next &gt;"
                      ButtonCount="10"
                      NextPreviousButtonCssClass="PrevNext"
                      CurrentPageLabelCssClass="CurrentPage"
                      NumericButtonCssClass="PageNumber" />
            </fields>
        </asp:DataPager>
      </div>
</div> Code behind this: Partial Class Contractor
Inherits System.Web.UI.Page

Private txtKeywordSearchWhereClause As String = ""

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load


    If Not Page.IsPostBack Then
        Session("Clicked") = "Contractor"
    End If

    If Not DBNull.Value.Equals(txtKeywordSearchWhereClause) Then
        LoadContractors(txtKeywordSearchWhereClause)
    Else
        LoadContractors("")
    End If

End Sub

Private Sub LoadContractors(ByVal strSearch As String)
    Dim strConn As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("Conn").ConnectionString)

    strConn.Open()

    Dim sql As String = "SELECT * FROM tblContractor1"

    If Not strSearch = "" Then
        sql = sql & strSearch
        sql = sql & " ORDER BY LastName"
    End If


    Dim da As SqlDataAdapter = New SqlDataAdapter(sql, strConn)

    Dim dt As DataTable = New DataTable()

    da.Fill(dt)

    lvContractors.DataSource = dt

    lvContractors.DataBind()
End Sub



Protected Sub buttonAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAdd.Click
    Response.Redirect("ContractorEdit.aspx", False)
End Sub

Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click
    '   Keyword Search

    Dim txtKeywordSearch As String = txtSearch.Text


    Dim txtWhereClause As String = ""

    If txtKeywordSearch.Trim() <> "" Then
        txtWhereClause = " WHERE FirstName LIKE '%" + txtKeywordSearch + "%'"
        txtWhereClause = txtWhereClause + " OR LastName LIKE '%" + txtKeywordSearch + "%'"
        txtWhereClause = txtWhereClause + " OR ContractorNumber LIKE '%" + txtKeywordSearch + "%'"

        txtKeywordSearchWhereClause = txtWhereClause
    End If

    LoadContractors(txtKeywordSearchWhereClause)

End Sub

Protected Sub lvContractors_PagePropertiesChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.PagePropertiesChangingEventArgs) Handles lvContractors.PagePropertiesChanging
    DataPagerContractor.SetPageProperties(e.StartRowIndex, e.MaximumRows, False)
    'rebind List View
    If Not DBNull.Value.Equals(txtKeywordSearchWhereClause) Then
        LoadContractors(txtKeywordSearchWhereClause)
    Else
        LoadContractors("")
    End If
End Sub

Конечный класс

0
user1121610 29 Дек 2011 в 21:04
Если вы также сохраните свой txtKeywordsearch в сеансе (и извлечете его оттуда), ваш пейджер будет работать
 – 
rene
30 Дек 2011 в 15:40

1 ответ

Извините, но это невозможно с помощью пейджера данных (по крайней мере, в ASP.Net 3.5). Единственное решение состоит в том, чтобы написать свой собственный пейджер с нуля, поскольку единственным параметром строки запроса, который может передать пейджер данных, является номер страницы.

0
MC9000 23 Ноя 2012 в 06:25