2011-09-12 12 views
2

DataTablesプラグインを使用してAjaxデータ用のAsp.Netリピーターコントロールをバインドしようとしていますが、動作しません。ここでJQuery DatatableプラグインAsp.NetリピーターとAjaxコールをロードする

$(document).ready(function() { 
       $('#tblMessages').dataTable({ 
        "sDom": 'T<"clear">lfrtip', 
        "oLanguage": { "sSearch": "Search the Messages:" }, 
        "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]], 
        "iDisplayLength": 25, 
        "bProcessing": true, 
        "bServerSide": true, 
        "bFilter": true, 
        "sAjaxSource": "../QCDataServices.asmx/GetPatients", 
        "fnServerData": function(sSource, aoData, fnCallback) { 
         aoData.push("{pageSize:'20',pageNumber:'1'}"); 
         $.ajax({ 
           "type": "POST", 
           "dataType": 'json', 
           "contentType": "application/json; charset=utf-8", 
           "url": sSource, 
           "data": aoData, 
           "success": function (msg) { 
            fnCallback(msg.d); 
           } 
          }); 
        }, 
        "sPaginationType": "full_numbers", 
        "oTableTools": { 
         "aButtons": [ 
        "copy", 
        "csv", 
        "xls", 
        { 
         "sExtends": "pdf" 
        }, 
        "print" 
       ] 
        }, 
        "aaSorting": [[0, "desc"]] 
       }); 
      }); 

ここ

public class PatientGridDataSet 
    { 
      public int sEcho { get; set; } 
      public int iTotalRecords { get; set; } 
      public int iTotalDisplayRecord { get; set; } 
      public List<Patient> aaData { get; set; } 
     } 

JSONオブジェクトとして取得するクラスがサービスメソッド

です
 [WebMethod(EnableSession=true)] 
      public PatientGridDataSet GetPatients(int pageSize, int pageNumber) 
      { 
       var patlist=Patients("", "", ""); 
       return new PatientGridDataSet {sEcho = pageNumber,iTotalRecords =   patlist.Count, iTotalDisplayRecord = pageSize, aaData= patlist.Skip(pageSize * pageNumber).Take(pageSize).ToList() }; 
      } 
      [WebMethod(EnableSession = true)] 
      public List<Patient> Patients(string searchIn, string Operator, string   searchString) 
      { 
       List<Patient> result; 
       try 
       { 
        DataRow[] rows; 
        var table = new dsVw_Patients.vw_PatientsDataTable(); 
        var adapter = new vw_PatientsTableAdapter(); 
        adapter.Fill(table); 
        //DataTable distinctTable = originalTable.DefaultView.ToTable(  /*distinct*/ true); 
        string hid = Context.Session["HospitalId"] == null ? "0" :   Context.Session["HospitalId"].ToString(); 
        string rid = Context.Session["RoleId"] == null ? "0" :   Context.Session["RoleId"].ToString(); 
        string uid = Context.Session["UserId"] == null ? "0" :   Context.Session["UserId"].ToString(); 
        if (searchIn.Equals("")) 
        { 
         rows = hid.Equals("0") ?   table.DefaultView.ToTable(true).Select("1=1", "PatientName ASC") : table.DefaultView.ToTable(true).Select("HospitalId="+hid, "PatientName ASC"); 
         if(rid.Equals("5")) 
          rows = table.DefaultView.ToTable(true).Select("UserId="+uid,   "PatientName ASC"); 
        } 
        else 
        { 
         if (hid.Equals("0")) 
         { 
          rows = Operator.Contains("%") ?   table.DefaultView.ToTable(true).Select(searchIn + " like '" + Operator.Replace("_", searchString) + "'", searchIn + " ASC") : table.DefaultView.ToTable(true).Select(searchIn + " " + Operator + " '" + searchString + "'", searchIn + " ASC"); 
         } 
         else 
         { 
          rows = Operator.Contains("%") ?   table.DefaultView.ToTable(true).Select("HospitalId=" + hid+" and "+searchIn + " like '" + Operator.Replace("_", searchString) + "'", searchIn + " ASC") : table.DefaultView.ToTable(true).Select("HospitalId=" + hid + " and " + searchIn + " " + Operator + " '" + searchString + "'", searchIn + " ASC"); 
         } 
         if (rid.Equals("5")) 
         { 
          rows = Operator.Contains("%") ?   table.DefaultView.ToTable(true).Select(searchIn + " like '" + Operator.Replace("_", searchString) + "'", searchIn + " ASC") : table.DefaultView.ToTable(true).Select(searchIn + " " + Operator + " '" + searchString + "'", searchIn + " ASC"); 
         } 
        } 

        var tieup=new clsTieUpCompanies(); 
        result = rows.Select(row => new Patient 
                { 
                 PatientId =   Convert.ToInt32(row["PatientId"]), PatientName = row["PatientName"].ToString(), Address = row["Address"].ToString(), Street = row["Street"].ToString(), City = row["City"].ToString(), ContactNo = row["Contactno"].ToString(), MobileNo = row["MobileNo"].ToString(), Email = row["Email"].ToString(), State = row["State"].ToString(), Country = row["Country"].ToString(), BPLCardNo = row["BPLCardNo"].ToString(), Company = tieup.GetTieupCompanyName(Convert.ToInt32(row["CompanyId"])) 
                }).ToList(); 
       } 
       catch (Exception) 
       { 
        result = null; 
       } 
       return result; 
      } 

私は自分のWebサービスメソッドを呼び出すときの最初のそれはそこに行かないしてください安心してコードを教えてください ここにマークアップはあります

 <asp:Repeater ID="rptList" runat="server"> 
     <HeaderTemplate> 
      <table id="tblMessages"> 
       <thead> 
        <tr> 
         <th> 
          Patient Name 
         </th> 
         <th> 
          Address 
         </th> 
         <th> 
          City 
         </th> 
         <th> 
          Contact No 
         </th> 
         <th> 
         MobileNo 
         </th> 
         <th> 
         BPL Card No. 
         </th> 
        </tr> 
       </thead> 
       <tbody> 
     </HeaderTemplate> 
     <ItemTemplate> 
      <tr> 
       <td> 
        <%# Eval("PatientName")%> 
       </td> 
       <td> 
        <%#Eval("Address")%> 
       </td> 
       <td> 
        <%# Eval("City")%> 
       </td> 
       <td> 
        <%# Eval("ContactNo")%> 
       </td> 
       <td> 
        <%# Eval("MobileNo")%> 
       </td> 
       <td> 
        <%# Eval("BPLCardNo")%> 
       </td> 
      </tr> 
     </ItemTemplate> 
     <FooterTemplate> 
      </tbody> </table> 
     </FooterTemplate> 
    </asp:Repeater> 
+0

テーブル#tblMessages –

答えて

3

@Tim Bジェームズ

私はそれは私が試した非常に理由が反抗さのためにそれを使用worked.But持っています。 80レコードのみを取得するには多くの時間がかかります。ここに私のクライアントコードを見つける。このリンクによって提供さ

私はソリューションを使用している
$(document).ready(function() { 
       var grid = $('#tblMessages').dataTable({  
        "sDom": 'T<"clear">lfrtip', 
        "oLanguage": { "sSearch": "Search the Messages:" }, 
        "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]], 
        "iDisplayLength": 25,     
        "oTableTools": { 
         "aButtons": [ 
        "copy", 
        "csv", 
        "xls", 
        { 
         "sExtends": "pdf" 
        }, 
        "print" 
       ] 
        },  
        "bProcessing": true, 
        "bSort": true, 
        "sPaginationType": "full_numbers",     
        "bServerSide": true,         
        "sAjaxSource": "../QCDataServices.asmx/GetPatients",         
        "fnServerData": function (sSource, aoData, fnCallback) { 
         var jsonAOData = JSON.stringify(aoData); 
         $.ajax({ 
          type: "POST", 
          //dataType: "json", 
          contentType: "application/json; charset=utf-8", 
          url: sSource, 
          data: "{jsonAOData : '" + jsonAOData + "'}", 
          success: function (msg) {        
           fnCallback(JSON.parse(msg.d)); 
          }, 
          error: function (XMLHttpRequest, textStatus, errorThrown) { 
           alert(XMLHttpRequest.status); 
           alert(XMLHttpRequest.responseText); 

          } 
         }); 
        }, 

        "aoColumnDefs": [ 
         { "fnRender": function (oObj) { 
          return "<a href='../FrmMessage.aspx?id='" +   oObj.aData[0] + "><img src='../../images/SMS.png'/></a>"; 
         }, 
          "bSortable": false, 
          "aTargets": [0] 
         }, 
         { "sName": "PatientName", 
          "bSearchable": true, 
          "aTargets": [1] 
         }, 
         { "sName": "Address", 
          "bSearchable": true, 
          "bSortable": true, 
          "aTargets": [2] 
         }, 
         { "sName": "ContactNo", "aTargets": [3] }, 
         { "sName": "MobileNo", "aTargets": [4] },     
         { "sName": "BPL Card No", "aTargets": [5] } 
        ] 
       }); 
       grid.fnSetFilteringDelay(1000); 
      }); 

http://activeengine.wordpress.com/2011/02/09/datatablepager-now-has-multi-column-sort-capability-for-datatables-net/

私のWebサービスメソッドは

 [WebMethod(EnableSession = true)] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public string GetPatients(string jsonAOData) 
    {   
     var patients= Patients("", "", "");    
     var dataTablePager = new DataTablePager<Patient>(jsonAOData, patients); 
     var formattedList = dataTablePager.Filter(); 
     return JsonConvert.SerializeObject(formattedList);   
    } 

    [WebMethod(EnableSession = true)] 
    public IQueryable<Patient> Patients(string searchIn, string Operator, string searchString) 
    { 
     IQueryable<Patient> result ; 
     try 
     { 
      DataRow[] rows; 
      var table = new dsVw_Patients.vw_PatientsDataTable(); 
      var adapter = new vw_PatientsTableAdapter(); 
      adapter.Fill(table); 
      //DataTable distinctTable = originalTable.DefaultView.ToTable(/*distinct*/ true); 
      var hid = Context.Session["HospitalId"] == null ? "0" : Context.Session["HospitalId"].ToString(); 
      var rid = Context.Session["RoleId"] == null ? "0" : Context.Session["RoleId"].ToString(); 
      var uid = Context.Session["UserId"] == null ? "0" : Context.Session["UserId"].ToString(); 
      if (searchIn.Equals("")) 
      { 
       rows = hid.Equals("0") ? table.DefaultView.ToTable(true).Select("1=1", "PatientName ASC") : table.DefaultView.ToTable(true).Select("HospitalId="+hid, "PatientName ASC"); 
       if(rid.Equals("5")) 
        rows = table.DefaultView.ToTable(true).Select("UserId="+uid, "PatientName ASC"); 
      } 
      else 
      { 
       if (hid.Equals("0")) 
       { 
        rows = Operator.Contains("%") ? table.DefaultView.ToTable(true).Select(searchIn + " like '" + Operator.Replace("_", searchString) + "'", searchIn + " ASC") : table.DefaultView.ToTable(true).Select(searchIn + " " + Operator + " '" + searchString + "'", searchIn + " ASC"); 
       } 
       else 
       { 
        rows = Operator.Contains("%") ? table.DefaultView.ToTable(true).Select("HospitalId=" + hid+" and "+searchIn + " like '" + Operator.Replace("_", searchString) + "'", searchIn + " ASC") : table.DefaultView.ToTable(true).Select("HospitalId=" + hid + " and " + searchIn + " " + Operator + " '" + searchString + "'", searchIn + " ASC"); 
       } 
       if (rid.Equals("5")) 
       { 
        rows = Operator.Contains("%") ? table.DefaultView.ToTable(true).Select(searchIn + " like '" + Operator.Replace("_", searchString) + "'", searchIn + " ASC") : table.DefaultView.ToTable(true).Select(searchIn + " " + Operator + " '" + searchString + "'", searchIn + " ASC"); 
       } 
      } 
      //.Skip(pageSize*pageNumber).Take(pageSize).ToList(). 
      var tieup=new clsTieUpCompanies(); 
      result = rows.Select(row => new Patient 
              { 
               PatientId = Convert.ToInt32(row["PatientId"]), PatientName = row["PatientName"].ToString(), Address = row["Address"].ToString(), Street = row["Street"].ToString(), City = row["City"].ToString(), ContactNo = row["Contactno"].ToString(), MobileNo = row["MobileNo"].ToString(), Email = row["Email"].ToString(), State = row["State"].ToString(), Country = row["Country"].ToString(), BPLCardNo = row["BPLCardNo"].ToString(), Company = tieup.GetTieupCompanyName(Convert.ToInt32(row["CompanyId"])) 
              }).AsQueryable(); 
     } 
     catch (Exception) 
     { 
      result = null; 
     } 
     return result; 
    } 

あるperformacnceを改善する方法を案内してください。

+0

パフォーマンスの問題も解決しましたが、データアクセスの調整が必要でした。私の結果は10のテーブルを10個含んでいたので、速度を抑えていました。 –

0

ページの読み込み時に<asp:Repeater>にデータをバインドしていない場合、そのページは決してページに表示されません。だから<table id="tblMessages">はhtmlに決して存在しません。

プレーンHTMLを使用してリピータコントロールを削除しないのはなぜですか?

<table id="tblMessages"> 
    <thead> 
     <tr> 
     <th> 
      Patient Name 
     </th> 
     <th> 
      Address 
     </th> 
     <th> 
      City 
     </th> 
     <th> 
      Contact No 
     </th> 
     <th> 
      MobileNo 
     </th> 
     <th> 
      BPL Card No. 
      </th> 
     </tr> 
    </thead> 
    <tbody> 
    </tbody> 
</table> 
+0

のHTMLマークアップを投稿してください。次にjqueryレベルで何を変更する必要がありますか –

+0

リピーターを削除するだけで何らかの変更を加えなければならないと思います。 –

+0

それからdidnt仕事 –

関連する問題