FlexiGrid“无项目”,响应清楚地显示数据

时间:2013-01-08 20:05:16

标签: jquery ajax vb.net flexigrid

表格可见,看起来很好,列标题显示,但经过一段时间“处理,请等待......”状态变为“无项目”。检查DOM中的响应显示正在从Web服务正确返回数据,格式如下:

<?xml version="1.0" encoding="utf-8"?>
<MyDataClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
  <Page>1</Page>
  <Rows>
    <MyDataRow>
      <request_id>13073</request_id>
      <status>501</status>
      <req_by_user_id>herbjm</req_by_user_id>
    </MyDataRow>
    ...
    ....
  </Rows>
</MyDataClass>

以下是有问题的flexigrid javascript:

$('#report').flexigrid({
    url: 'reportdata.asmx/rptPendingServerRequestsFlexi',
    dataType: 'xml',
    colModel: [
        { display: 'ID', name: 'request_id', width: 40, sortable: true, align: 'center' },
        { display: 'Status', name: 'status', width: 180, sortable: true, align: 'left' },
        { display: 'Requested By', name: 'req_by_user_id', width: 120, sortable: true, align: 'left' }
    ],
    searchitems: [
        { display: 'ID', name: 'request_id' },
        { display: 'Status', name: 'status', isdefault: true },
        { display: 'Requested By', name: 'req_by_user_id' }
    ],
    sortname: "request_id",
    sortorder: "desc",
    usepager: false,
    title: 'Server Requests',
    useRp: false,
    rp: 30,
    showTableToggleBtn: false,
    singleSelect: true
});

对于奖励积分,即使分页被禁用,我如何显示页脚?

更新:我检查了DOM的flexigrid演示,这里是他们返回的XML的格式:

<?xml version="1.0" encoding="utf-8"?>
<rows>
    <page>1</page>
    <total>239</total>
    <row id='1'>
        <cell>1</cell>
        <cell>501</cell>
        <cell>Steve</cell>
    </row>
    <row id='2'>
        <cell>2</cell>
        <cell>501</cell>
        <cell>Fred</cell>
    </row>
</rows>

我猜这就是为什么它不起作用?要了解我如何构建回复,请参阅此问题:vb.net return json object with multiple types?

2 个答案:

答案 0 :(得分:1)

根据我发现here以及其他几个位置的各种信息,flexigrid要求XML具有特定的格式:

rows - the row definition
  page - the current page number
  total - the total count of rows in this collection
  row - the row, with a unique property called id
    cell - each row must contain cells in the order that they are displayed on the grid

由于MyDataClass是由your previous question生成的,因此这些类的更新版本将产生所需的输出:

<XmlType("rows")> _
Public Class MyDataClass

    <XmlElement("page")> _
    Public Property Page As Integer

    <XmlElement("total")> _
    Public ReadOnly Property Total As Integer
        Get
            If Me.Rows IsNot Nothing Then
                Return Me.Rows.Count
            Else
                Return 0
            End If
        End Get
    End Property
    <XmlElement("row")> _
    Public Property Rows As List(Of MyDataRow)

    ' Parameterless constructor to support serialization.
    Public Sub New()
        Me.Rows = New List(Of MyDataRow)
    End Sub
    Public Sub New(wPage As Integer, ds As DataSet)
        Me.New()

        Me.Page = wPage

        For Each oRow As DataRow In ds.Tables(0).Rows
            Dim oMyRow As New MyDataRow

            oMyRow.Id = CInt(oRow("id"))
            oMyRow.Name = CStr(oRow("Name"))

            Me.Rows.Add(oMyRow)
        Next

    End Sub
End Class

<XmlType("row")> _
Public Class MyDataRow
    <XmlAttribute("id")> _
    Public Property Id As Integer

    Private m_cCells As List(Of MyDataCell)

    <XmlIgnore()> _
    Public WriteOnly Property Name As String
        Set(value As String)
            Me.AddCell("Name", value)
        End Set
    End Property

    <XmlElement("cell")> _
    Public ReadOnly Property Cells As List(Of MyDataCell)
        Get
            Return m_cCells
        End Get
    End Property

    ' Parameterless constructor to support serialization
    Public Sub New()
        m_cCells = New List(Of MyDataCell)
    End Sub

    Public Sub AddCell(sCellName As String, sCellValue As String)
        m_cCells.Add(New MyDataCell(sCellName, sCellValue))
    End Sub
End Class

Public Class MyDataCell
    <XmlIgnore()> _
    Public Property Name As String
    <XmlText()> _
    Public Property Value As String

    ' Parameterless constructor to support serialization
    Public Sub New()

    End Sub
    Public Sub New(sCellName As String, sCellValue As String)
        Me.New()
        Me.Name = sCellName
        Me.Value = sCellValue
    End Sub
End Class

答案 1 :(得分:0)

大家看看flexiuigrid的这个演示

http://flexidemo.ranjitjena.com/