2015-10-26 4 views
0

Я использовал следующее: ASP. Net 2008 3.5 Webforms/Teradata Database. Используемый браузер: IE 9, Firefoxjqgrid не загружает все строки

Я могу загрузить до 1700 строк, но не все 2000+ записей. Ошибка отправлена. Пожалуйста, помогите мне решить эту проблему. Пожалуйста, советы, если я пропустил какой-либо ссылки и код ниже:

<link href="CSS/jquery-ui-1.9.2.custom.css" rel="stylesheet" type="text/css" /> 
<link href="CSS/ui.jqgrid.css" rel="stylesheet" type="text/css" /> 
<script src="Script/jquery-1.8.3.js" type="text/javascript"></script> 
<script src="Script/jquery-ui-1.9.2.custom.js" type="text/javascript"></script> 
<script src="Script/grid.locale-en.js" type="text/javascript"></script> 
<script src="Script/jquery.jqGrid.min.js" type="text/javascript"></script> 
<script language="javascript" type="text/javascript" > 
    $(function() { 
     $("#dataGrid").jqGrid({ 
      url: 'UploadHistory.aspx/DisplayListToJQGrid', 
      datatype: 'json', 
      mtype: 'POST', 
      serializeGridData: function(postData) { 
       return JSON.stringify(postData); 
      }, 
      ajaxGridOptions: { contentType: "application/json; charset=utf-8" }, 
      colNames: ['Liability', 'Channel_Lvl_2_Desc'], 
      colModel: [ 
          { name: 'Liability', index: 'Liability', width: 300 }, 
          { name: 'Channel_Lvl_2_Desc', index: 'Channel_Lvl_2_Desc', width: 200 }, 
          //{ name: 'T_ADDS', index: 'T_ADDS', width: 200 } 
      ], 
      pager: '#pagingGrid', 
      rowNum: 10, 
      rowList: [10, 20, 100], 
      viewrecords: true, 
      gridview: true, 
      width: 780, 
      rownumbers: true, 
      loadonce: true, 
      jsonReader: { 
       page: function(obj) { return 1; }, 
       total: function(obj) { return 1; }, 
       records: function(obj) { return obj.d.length; }, 
       root: function(obj) { return obj.d; }, 
       repeatitems: false, 
       id: "0" 
      }, 
      caption: 'Data List' 
     }); 
    }); 
</script> 




<WebMethod()> _ 
Public Shared Function DisplayListToJQGrid() As List(Of Dictionary(Of String, Object)) 

    Return UploadClass.LoadListToJQGrid() 

End Function 

<WebMethod()> _ 
Public Shared Function LoadListToJQGrid() As List(Of Dictionary(Of String, Object)) 

    Dim cmdQry As String = "" 

    cmdQry = "SELECT TOP 1970 Liability, Channel_Lvl_2_Desc FROM TABLENAME" 

    Return DataAccessClass.GetListFromDB(cmdQry) 

End Function 


<WebMethod()> _ 
Public Shared Function GetListFromDB(ByVal Sql As String) As List(Of Dictionary(Of String, Object)) 


    Dim dt As New DataTable 

    Dim cmd As New Teradata.Client.Provider.TdCommand(Sql, DBConnectionClass.pTDConobj) 
    Dim da As New TdDataAdapter(cmd) 
    da.Fill(dt) 

    'Dim serializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer 
    Dim rows As New List(Of Dictionary(Of String, Object))() 
    Dim row As Dictionary(Of String, Object) = Nothing 

    For Each dr As DataRow In dt.Rows 
     row = New Dictionary(Of String, Object)() 
     For Each col As DataColumn In dt.Columns 
      row.Add(col.ColumnName.Trim(), dr(col).ToString()) 
     Next 
     rows.Add(row) 
    Next 

    Dim serializer As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer() 
    serializer.Serialize(rows) 

    Return rows 

End Function 
+0

вы можете сделать javascript разборчивым? – Rakin

+0

Я не думаю, что это хорошая идея. Ни один пользователь не может просматривать 1 млн. Ячеек. Таким образом, вы хотите отправить клиенту 99,9% ненужных данных. Вам действительно нужна реализация тематической фильтрации данных. Производительность сетки будет в основном зависеть от механизма JavaScript используемого вами веб-браузера. В любом случае, я уверен, что вам нужно реализовать подкачку, сортировку и фильтрацию на стороне сервера. Я думаю, что это действительно необходимо в случае 1 миллиона ячеек данных. – Rakin

+0

Мне жаль, что это мой первый раз, используя этот сайт. – EdwinP

ответ

1

Я полагаю, что у вас есть проблема с чистой серверной стороной. Вы используете WebMethod, который возвращает данные JSON. Вы можете увеличить лимит, включив что-то вроде jsonSerialization maxJsonLength="50000000"/> на соответствующее место в web.config. См. the answer для более подробной информации.

Я бы порекомендовал вам дополнительно включить loadError обратный вызов в jqGrid, чтобы увидеть ошибки типа «Ошибка при сериализации или десериализации с использованием JSON JavaScriptSerializer. Длина строки превышает значение, установленное в свойстве maxJsonLength». См. the old answer для получения более подробной информации об использовании обратного вызова loadError.

+0

На самом деле я ранее включил maxJasonLength в webconfig, но не работает. также я включил это, прежде чем возвращать строки в «GetListFromDB», но также не работают. 'Дим, например, как JavaScriptSerializer ' значение Dim As Integer 'значение = instance.MaxJsonLength ' дим serializerB As New System.Web.Script.Serialization.JavaScriptSerializer() 'serializerB.MaxJsonLength = 2097152 ' serializerB.Serialize (строки) – EdwinP

+0

@EdwinP: Какую ошибку вы получаете? Вы включили 'loadError'? Вы пытались увидеть ответ HTTP с сервера (используя [Fiddler] (http://www.telerik.com/fiddler) или инструменты разработчика IE/Chrome)? – Oleg

+0

Я уже включил «loadError» и получил тело сообщения HTTP (jqXHR.responseText): – EdwinP

Смежные вопросы