这是一种使用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标记在空白时仍然呈现。
答案 0 :(得分:1)
您必须在这两个级别工作:
(1)使用EmptyDataTemplate
或EmptyDataText
确保空的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