Другое решение состоит в том, чтобы всегда добавлять фиктивную строку в источник данных, «помечать» эту строку определенным значением, а затем скрывать строку в RowDataBound.
Чтобы быть более точным, добавьте столбец ", 0 AS dummyRow" в конец предложения SELECT вашего запроса, затем UNION ALL для полной статистики в
SELECT NULL AS column1, NULL AS column2,...,NULL AS columnN, 1 AS dummyRow
Как только у вас есть запрос (все это можно сделать внутри вашего SQLDataSource или в вашем объекте DAL, ваш код для сетки будет выглядеть примерно так:
Protected Sub MyGridView_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles MyGridView.RowDataBound
If (e.Row.RowType = DataControlRowType.DataRow) AndAlso (Not e.Row.DataItem Is Nothing) AndAlso (CInt(e.Row.DataItem("dummyRow")) = 1) Then
e.Row.Visible = False
End If
End Sub
Это решение имеет некоторые очевидные накладные расходы, так как эта проверка будет выполняться для каждой строки результатов, не говоря уже о том, что вам нужно изменить ваш запрос SELECT, но оно также имеет то преимущество, что не требует динамического изменения набора данных ( как в первом примере) и не требует большого количества кода или развертывания пользовательских библиотек управления для вашего веб-проекта.