2012-03-29 87 views
-1

我想为一个简单的表JQGrid。从JQGrid与ASP.Net MVC与VB.Net

http://haacked.com/archive/2009/04/14/using-jquery-grid-with-asp.net-mvc.aspx

后用VB下通过翻译版本从

http://www.qa.downappz.com/questions/jqgrid-sorting-in-vb-net-mvc-app.html

我把它修改为我自己的数据库,并使用此功能

Public Function SelectGridData(ByVal sidx As String, ByVal sord As String, ByVal page As Integer, ByVal rows As Integer) As ActionResult 
    Dim context As New IssueDBEntities 
    Dim pageIndex As Integer = Convert.ToInt32(page) - 1 
    Dim pageSize As Integer = rows 
    Dim totalRecords As Integer = context.Issues.Count() 
    Dim totalPages As Integer = CInt(Math.Ceiling(CSng(totalRecords)/CSng(pageSize))) 

    Dim jsonData = New With { _ 
    .total = totalPages, _ 
    .page = page, _ 
    .records = totalRecords, _ 
    .rows = (From p In context.Issues _ 
     Order By (p.ID & " " & sord) _ 
     Select New With {.id = p.ID, .cell = _ 
        {p.ID, p.Image_Path, p.Magazine_Type,p.Magazine_Path}}).ToArray()} 

    Return Json(jsonData, JsonRequestBehavior.AllowGet) 
End Function 
上来

网格确实显示没有任何数据,系统将引发错误

错误描述说

“无法投类型‘System.Int32’输入‘System.Object的’。 LINQ到实体仅支持铸造实体数据模型的基本类型。”

任何帮助表示赞赏,如果这是由于一些基本的误解,请指导我,我愿意做一些艰苦的工作。

谢谢

编辑:终于当过每奥列格的建议代码

Dim Simple_Object As IQueryable(Of Object) 
     Dim Second_Simple_Object As IQueryable(Of Object) 

     Dim My_Array As Array 
     Dim My_Second_Array As Array 

     Simple_Object = From p In Context.Issues _ 
        Order By (p.ID & " " & sord) _ 
       Select New With {p.ID, p.Image_Path, p.Magazine_Type, p.Magazine_Path} 

     My_Array = Simple_Object.ToArray() 

     Second_Simple_Object = From p In Context.Issues _ 
        Order By (p.ID & " " & sord) _ 
       Select New With {p.ID} 

     My_Second_Array = Second_Simple_Object.ToArray() 

     Dim My_Result(0) As My_Record_Type 

     For i = 0 To My_Array.GetLength(0) - 1 
      If i > 0 Then 
       ReDim Preserve My_Result(i) 
      End If 

      My_Result(i) = New My_Record_Type 

      My_Result(i).id = CInt(My_Second_Array(i).ID) 
      My_Result(i).Cell = {My_Array(i).ID.ToString, My_Array(i).Image_Path.ToString, _ 
            My_Array(i).Magazine_Type.ToString, My_Array(i).Magazine_Path.ToString} 
     Next 

Class My_Record_Type 
    Public id As Integer 
    Public Cell As String() 
End Class 

回答

2

您尝试填写rows财产一步的问题是,你采用E。 ntity Framework在转换数据类型时有一些限制。您可以解决问题,如果您首先进行查询获取您需要的项目没有任何数据转换并保存中间结果为List的项目。之后,您可以创建另一个LINQ查询,其中包含明确转换为p.ID的字符串。而且你现在的代码不使用任何数据分页。因此,如果您不使用loadonce: true,用户将永远不会看到更多的第一页。

我很难在没有调试的情况下在VB中编写正确的代码。我从去年开始就使用C#。我建议你看看the answer了解更多信息。它包含了服务器端过滤的实现。如果你不需要它,并删除相应的代码,其余代码将非常短,我希望它很容易理解。

+0

谢谢你的回复是的,我通过使它们分开 – skv 2012-04-02 04:04:44

+0

谢谢试过您的解决方案你的答复,是的我试图通过使他们分开代码的解决方案,我不得不创建一个对象来实现这个结果,和JSON似乎罚款与填充数据,但不知何故我的网页没有显示,但我认为你的建议解决了原来的问题,所以非常感谢你 – skv 2012-04-02 04:15:13

+0

我已经发布了代码,在其他论坛上,我问了这个问题,因为我不能在这里发表http://forums.asp.net/p/ 1786677/4910852.aspx/1?p = True&t = 634689228293174596 – skv 2012-04-02 04:33:40