Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Απόκρυψη columns σε gridview

Îåêßíçóå áðü ôï ìÝëïò dimos.homatas. Τελευταία δημοσίευση από το μέλος dimos.homatas στις 16-12-2011, 08:19. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  15-12-2011, 12:49 68631

    Απόκρυψη columns σε gridview

    Καλησπέρα σας,

    έχουμε μία web form στην οποία βρίσκεται ένα gridview. Το gridview έχει πχ 10 στήλες. Τις έχουμε φορμάρει (captions, widths, heights κλπ) καθώς και το DataField.

    Τώρα, έχουμε μία λίστα με αντικείμενα που έχουν ισάριθμο αριθμό properties. 

    Από αυτήν την λίστα τρέχουμε διάφορα linq queries τα οποία μπορεί αν φέρνουν μόνο ένα υποσύνολο από τα πεδία, πχ 5. (σε ένα νέο anonymous type, δεν έχει σημασία)

    Αυτά τα 5 πεδία έχουν το ίδιο όνομα με τα databindings στα columns.

    Οπότε ορίζοντας πλέον το datasource στο αποτέλεσμα του query, βλέπουμε το grid να γεμίζει τα 5 από τα 10 πεδία.

    Και το ερώτημα είναι: 

    πως μπορώ να κρύψω τα υπόλοιπα; χωρίς να τα κάνω με το χέρι; πχ να κάνω ένα foreach και να δω ποιο (column?) έχει (κάτι?) ορισμένο και αναλόγως να ορίσω και το visibility?

    Ευχαριστώ

    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  15-12-2011, 23:13 68638 σε απάντηση της 68631

    Απ: Απόκρυψη columns σε gridview

    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 ασχολείσαι βλέπω.... Smile


    Τάσος Καραγιάννης

    Baby debugging steps...
  •  16-12-2011, 08:19 68640 σε απάντηση της 68638

    Απ: Απόκρυψη columns σε gridview

    Όχι εγώ, ο συνάδελφος! Εγώ κάνω το back end :)
    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems