2015-08-24 82 views
0

我想從gridview中搜索帶有分頁的記錄,與輸入到文本框中的值匹配,並且其工作相當好。問題是,它只顯示第一頁的記錄,而不是搜索下一頁的記錄。根據輸入到TextBox中的值從gridview中搜索記錄

ASPX代碼:

<asp:GridView ID="GrdFutureApt" AutoGenerateColumns="false" runat="server" CssClass="table table-responsive table-condensed table-bordered table-striped" AllowPaging="true" 
     CellPadding="4" ForeColor="#333333" GridLines="None" PageSize="5" OnPageIndexChanging="GrdFutureApt_PageIndexChanging"> 

     <Columns> 
       <asp:TemplateField> 
        <ItemTemplate> 
         <%#Container.DataItemIndex+1 %> 
        </ItemTemplate> 
       </asp:TemplateField> 
      <asp:BoundField DataField="PatientName" HeaderText="Patient Name" Visible="false"/> 
      <asp:BoundField DataField="DoctorName" HeaderText="Doctor Name"/> 
      <asp:BoundField DataField="AppointmentDate" HeaderText="Appointment Date" DataFormatString="{0:dd/MM/yyyy}"/> 

      <asp:TemplateField HeaderText = "Appointment Time" SortExpression="Time"> 
        <ItemTemplate> 
        <asp:Label runat="server" ID="lblAppointmentTime" Text='<%# DisplayAs12HourTime(Eval("AppointmentTime")) %>'></asp:Label> 

        </ItemTemplate> 
       </asp:TemplateField> 
      <asp:BoundField DataField="AppoinmentStatus" HeaderText="Status"/> 
     </Columns> 
     <PagerSettings Mode="NextPrevious" PreviousPageText="Previous" NextPageText="&nbsp; Next" Position="Bottom" /> 
     <PagerStyle BackColor="#889FA2" HorizontalAlign="Left" ForeColor="White" Font-Bold="true" /> 
    </asp:GridView> 

我用下面的腳本來執行此功能。

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#<%=txtSearchBox.ClientID %>').keyup(function (e) { 
      SearchGridData(); 

     }); 
    }); 
    function SearchGridData() { 
     var counter = 0; 
     //Get the search text 
     var searchText = $('#<%=txtSearchBox.ClientID %>').val().toLowerCase(); 
     //Hide No record found message 
     $('#<%=lblMsgFail.ClientID %>').hide(); 
     //Hode all the rows of gridview 
     $('#<%=GrdAppointments.ClientID %> tr:has(td)').hide(); 
     if (searchText.length > 0) { 
      //Iterate all the td of all rows 
      $('#<%=GrdAppointments.ClientID %> tr:has(td)').children().each(function() { 
       var cellTextValue = $(this).text().toLowerCase(); 
       //Check that text is matches or not 
       if (cellTextValue.indexOf(searchText) >= 0) { 
        $(this).parent().show(); 
        counter++; 
       } 
      }); 
      if (counter == 0) { 
       //Show No record found message 
       $('#<%=lblErrorMsg.ClientID %>').show(); 
      } 
     } 
     else { 
      //Show All the rows of gridview 
      $('#<%=lblErrorMsg.ClientID %>').hide(); 
      $('#<%=GrdAppointments.ClientID %> tr:has(td)').show(); 

     } 
    } 
</script> 

而且使用下面的JavaScript

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript"></script> 

的數據來填充GridView控件來自於以下幾個功能:

public void LoadGrid() 
{ 
    S011AppointmentBOL objBol = new S011AppointmentBOL(); 
    //DataTable ptApt = new DataTable(); 
    dtAppointment = S011AppointmentBLL.GetAll(); 

    int patID = dtPatient.AsEnumerable().Where(x => x.Field<string>("RegistrationNo") == RegNo).Select(x => x.Field<int>("PatientID")).FirstOrDefault(); 
    dtAppointment.Columns.Add("PatientName", typeof(string)); 
    dtAppointment.Columns.Add("DoctorName", typeof(string)); 
    for (int i = 0; i < dtAppointment.Rows.Count; i++) 
    { 
     string pFname = dtPatient.AsEnumerable() 
         .Where(x => x.Field<int>("PatientID") == Convert.ToInt32(dtAppointment.Rows[i]["PatientID"])) 
         .Select(x => x.Field<string>("FirstName")).FirstOrDefault(); 
     string pLname = dtPatient.AsEnumerable() 
         .Where(x => x.Field<int>("PatientID") == Convert.ToInt32(dtAppointment.Rows[i]["PatientID"])) 
         .Select(x => x.Field<string>("LastName")).FirstOrDefault(); 
     string dFname = dtDoctor.AsEnumerable() 
         .Where(x => x.Field<int>("DoctorID") == Convert.ToInt32(dtAppointment.Rows[i]["DoctorID"])) 
         .Select(x => x.Field<string>("FirstName")).FirstOrDefault(); 
     string dLname = dtDoctor.AsEnumerable() 
         .Where(x => x.Field<int>("DoctorID") == Convert.ToInt32(dtAppointment.Rows[i]["DoctorID"])) 
         .Select(x => x.Field<string>("LastName")).FirstOrDefault(); 
     dtAppointment.Rows[i]["PatientName"] = pFname + " " + pLname; 
     dtAppointment.Rows[i]["DoctorName"] = dFname + " " + dLname; 
    } 
    DataTable boundTable = new DataTable(); 
    var query = dtAppointment.AsEnumerable().Where(x => x.Field<int>("PatientID") == patID).Select(x => x).OrderByDescending(x => x.Field<DateTime>("AppointmentDate")); 
    var t = query.Any(); 
    if (t) 
    { 
     boundTable = query.CopyToDataTable<DataRow>(); 
    } 

    GrdAppointments.DataSource = boundTable; 
    GrdAppointments.DataBind(); 
} 

以及爲數據庫中的每個KEYUP我不想詢問這是爲什麼我正在使用Datatable填寫gridview
任何幫助讚賞..謝謝

+0

查看jQuery DataTables是否對您有任何用處。使用正確時非常光滑。 https://www.datatables.net/ – dansasu11

回答

0

您已經爲Gridview啓用了分頁功能,因此它只會綁定客戶端中選定頁面的記錄。因此,您必須通過調用webmethord來搜索可綁定搜索結果的整個記錄​​來禁用分頁或重寫jQuery搜索功能。

+0

你能告訴我如何做到這一點... –

相關問題