2011-12-29 59 views
0

由於這是我的第一個項目,我真的沒有太多的想法來調試這個。我有一個列表視圖。我手動編寫代碼來填充列表視圖。由於listview非常大,我有一個用戶輸入搜索字符串的搜索按鈕。我試圖從這裏建立一個SQL字符串並填充列表視圖。一切正常,但當我點擊下一頁時,它不包含搜索字符串。我認爲這只是在沒有搜索標準的情況下填充第二頁。如果我刪除數據尋呼機控制,它工作正常。我無法將正確的代碼datapger_PagePropertiesChanging。我很感激有人能幫助我。帶有Search和DataPager控件的列表視圖

這裏是我的列表視圖標記:

  <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

如果你還在會話中存儲你的txtKeywordsearch(也可以從那裏取回),你的分頁器將工作 – rene 2011-12-30 11:40:11

回答

0

遺憾地說,但這是不可能的DataPager的(至少在ASP.Net 3.5)。 唯一的解決方案是從頭編寫自己的尋呼機,因爲數據手冊可以傳遞的唯一查詢字符串參數是頁碼。