Nα υποθέσω πως τα Columns του GridView είναι τύπου <asp:BoundField />;
Έστω ότι το GridView σου έχει ID="ContactsGridView". Τότε στο code behind μπορείς να έχεις το εξής:
Private GridHasData As Boolean()
Private DataColumnCount As Integer
Private Sub ContactsGridView_RowCreated(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles ContactsGridView.RowCreated
If (e.Row.RowType = DataControlRowType.DataRow) Then
If (e.Row.DataItem IsNot Nothing) Then
For i As Integer = 0 To DataColumnCount
GridHasData(i) = GridHasData(i) Or (CType(e.Row.DataItem, System.Data.DataRowView).Item(i) <> "")
Next
End If
End If
If (e.Row.RowType = DataControlRowType.Footer) Then
For i As Integer = 0 To GridHasData.Length
ContactsGridView.Columns(i).Visible = GridHasData(i)
Next
End If
End Sub
Αν πάλι είσαι με <asp:TemplateField /> μπορείς να καλείς μέσα στο template μία function που να κάνει το check αν το συγκεκριμένο κελί έχει data.
Το markup θα μπορούσε να είναι κάπως έτσι:
<asp:GridView ID="ContactsGridView" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%# Eval("first_name") %>
<%# HasData(0, Eval("first_name") <> "")%>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<%# Eval("last_name") %>
<%# HasData(1, Eval("last_name") <> "")%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Το code behind του .aspx / .ascx θα είναι:
Private GridHasData As Boolean()
Protected Function HasData(ByVal ColumnIndex As Integer, ByVal CellHasData As Boolean) As String
GridHasData(ColumnIndex) = GridHasData(ColumnIndex) Or CellHasData
Return ""
End Function
Private Sub ContactsGridView_RowCreated(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles ContactsGridView.RowCreated
If (e.Row.RowType = DataControlRowType.Footer) Then
For i As Integer = 0 To GridHasData.Length
ContactsGridView.Columns(i).Visible = GridHasData(i)
Next
End If
End Sub
Δεν έτρεξα τον κώδικα, και κάποια πράγματα θέλουν μια αρχικοποίηση, έχει περάσει και η ώρα, αλλά νομίζω καταλαβαίνεις την λογική μου.
Βέβαια, αν πάλι όλα αυτά φαίνονται πολλά, μπορούμε να δούμε και κάποια λύση με javascript / jQuery.
Υ.Γ. Πάλι με web ασχολείσαι βλέπω....
Τάσος Καραγιάννης
Baby debugging steps...