使用jQuery mobile和ASP.NET Gridview的响应表

时间:2013-10-04 13:21:31

标签: javascript jquery asp.net vb.net nullreferenceexception

这是一种使用ASP.NET gridview创建jQuery Mobile响应表的方法。

ASP.NET (回流示例)

Protected Sub gv_DataBound(ByVal sender As Object, ByVal e As EventArgs) Handles gv.DataBound
    gv.HeaderRow.TableSection = TableRowSection.TableHeader
    gv.Attributes.Add("data-role", "table")
    gv.Attributes.Add("data-mode", "reflow")

    Dim headerCells = gv.HeaderRow.Cells
    headerCells(3).Attributes.Add("data-priority", "2")
    headerCells(4).Attributes.Add("data-priority", "2")
End Sub

问题

当我的gridview没有返回结果时,我收到错误:对象引用未设置为对象的实例。

我认为这是因为gridview没有任何内容可以绑定,但gridview仍然呈现为表格。

任何人都可以设想为什么会出现这种情况以及如何解决这个问题?

THE FIX

要解决这个问题,请务必在网格视图中添加ShowHeaderWhenEmpty =“True”,以确保thead标记在空白时仍然呈现。

2 个答案:

答案 0 :(得分:1)

您必须在这两个级别工作:

(1)使用EmptyDataTemplateEmptyDataText确保空的GridView呈现带有完全由您控制的html标记。但是,您可能仍需要避开databind。见下文。

确定如何数据绑定GridView:

如果您使用来自数据访问层的数据手动执行此操作,则可以有条件地绑定它。例如如果您的数据源是list,那么首先检查该列表是否包含数据:

If myList.Any then
    MyGrid.DataSource = myList 
    MyGrid.DataBind()
Else
    'take evasive measures here
End If

这样您就可以避免调用GridView的DataBind处理程序,并避免出现“对象引用”错误。

(2)或者,您可能希望查看GridView上设置为ShowHeaderWhenEmpty的{​​{1}}属性。这样,仍然会创建一个表,并且您的true代码不会产生“对象引用”错误。您需要databind EmptyDataTemplate才能工作。

答案 1 :(得分:0)

你必须检查Empty GridView IF for Empty GridView,不需要像这样在DataBound事件中执行你的代码。

Protected Sub gv_DataBound(ByVal sender As Object, ByVal e As EventArgs) Handles gv.DataBound
    If gv.Rows.Count > 0 Then
        gv.HeaderRow.TableSection = TableRowSection.TableHeader
        gv.Attributes.Add("data-role", "table")
        gv.Attributes.Add("data-mode", "reflow")

        Dim headerCells = gv.HeaderRow.Cells
        headerCells(3).Attributes.Add("data-priority", "2")
        headerCells(4).Attributes.Add("data-priority", "2")
    End If
End Sub