ListView с элементами управления Search и DataPager - PullRequest
0 голосов
/ 29 декабря 2011

Поскольку это мой первый проект, у меня действительно нет особой идеи отладить это.У меня есть список.Я пишу код вручную для заполнения списка.Поскольку просмотр списка очень большой, у меня есть кнопка поиска, где пользователь вводит строку поиска.Я пытаюсь построить строку 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

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

1 Ответ

0 голосов
/ 23 ноября 2012

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

...