Адаптивные таблицы с помощью jQuery mobile и ASP.NET Gridview

0

Вот способ создания таблиц с поддержкой 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 все равно отображается при пустом.

  • 0
    Это может быть связано с тем, что не создан HeaderRow, поскольку нет данных. Попробуйте проверить, есть ли HeaderRow перед доступом к его ячейкам
  • 0
    Я согласен, что это, вероятно, причина проблемы.
Показать ещё 1 комментарий
Теги:
nullreferenceexception

2 ответа

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) В качестве альтернативы вы можете посмотреть, что свойство ShowHeaderWhenEmpty установлено в true в GridView. Таким образом, таблица будет еще получить создан и ваш databind код не будет производить "объект" ошибки. Вам нужно использовать EmptyDataTemplate для ShowHeaderWhenEmpty.

  • 0
    Вариант (2) на победу. Я люблю легкие исправления. Я даже не знал о свойстве ShowHeaderWhenEmpty. Большое спасибо @abhitalks =)
  • 0
    Рад помочь :)
0

Вы должны проверить наличие пустого 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню