Вот способ создания таблиц с поддержкой jQuery Mobile с помощью gridview ASP.NET.
ASP.NET (пример Reflow)
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 все равно отображается при пустом.
Здесь вам нужно будет работать на двух уровнях:
(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) В качестве альтернативы вы можете посмотреть, что свойство ShowHeaderWhenEmpty
установлено в true
в GridView. Таким образом, таблица будет еще получить создан и ваш databind
код не будет производить "объект" ошибки. Вам нужно использовать EmptyDataTemplate
для ShowHeaderWhenEmpty
.
Вы должны проверить наличие пустого GridView IF для пустого 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