0

这是一种使用 ASP.NET 网格视图创建 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 仍然呈现为表格。

谁能想象为什么会发生这种情况以及如何解决?

修复

要解决此问题,请务必将 ShowHeaderWhenEmpty="True" 添加到您的 gridview 以确保在空时仍然呈现 thead 标记。

4

2 回答 2

2

您将必须在两个级别上工作:

(1) 使用EmptyDataTemplateorEmptyDataText确保空的 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设置的属性。true这样,仍然会创建一个表,并且您的databind代码不会产生“对象引用”错误。你需要一个EmptyDataTemplateforShowHeaderWhenEmpty才能工作。

于 2013-10-04T13:33:27.713 回答
0

您必须检查 Empty GridView IF 是否为 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
于 2013-10-04T13:45:13.023 回答