0

これは私の最初のプロジェクトであるため、これをデバッグするアイデアはあまりありません。リストビューがあります。リストビューにデータを入力するコードを手動で書いています。リストビューは非常に大きいため、ユーザーが検索文字列を入力する検索ボタンがあります。ここから 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

クラス終了

4

1 に答える 1

0

申し訳ありませんが、これはデータページャーでは不可能です (少なくとも ASP.Net 3.5 では)。唯一の解決策は、datapager が渡すことができる唯一のクエリ文字列パラメーターがページ番号であるため、独自の pager を最初から作成することです。

于 2012-11-23T02:25:14.573 に答える