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

 

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

DataGridViewColumn και DataGridViewImageColumn

Îåêßíçóå áðü ôï ìÝëïò sakis_drm. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 04-12-2010, 18:24. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  31-08-2010, 21:49 59840

    DataGridViewColumn και DataGridViewImageColumn

    Καλησπέρα σε ολους.

    Σε ένα datagridView που δείχνει τα αποτελέσματα ενός sql ερωτήματος το οποίο περιέχει εικόνες. π.χ. :

    SELECT [ID_Person], [Name], [Img] FROM [Persons]

    Προσπαθώ να βρώ έναν ωραίο τρόπο, ώστε οι εικόνες που δείχνει να γίνονται strech, για να φαίνονται ως μικρογραφίες στο ύψος που επιτρέπει μια φυσιολογική μικρή γραμμή ενός grid.

    Για παράδειγμα, όπως με αυτόν τον τρόπο τρέχω μια μια τις στήλες για να κόψω το sort :
    1
    2
    3
    4
     
       foreach (DataGridViewColumn column in dgv.Columns)
       {
           column.SortMode = DataGridViewColumnSortMode.NotSortable;
       }

    Θα βόλευε αν το παραπάνω μπορούσε να επεκταθεί σε :
    1
    2
    3
    4
    5
     
        foreach (DataGridViewColumn column in dgv.Columns)
    {
    column.SortMode = DataGridViewColumnSortMode.NotSortable;
    column.ImageLayout = DataGridViewImageCellLayout.Stretch;
    }
    όμως το ImageLayout κοκκινίζει γιατί δεν αποτελεί υπαρκτό property.

    Άρα πάμε στο αντικέιμενο DataGridViewImageColumn :
    1
    2
    3
    4
     
        foreach (DataGridViewImageColumn column in dgv.Columns)
        {
            column.ImageLayout = DataGridViewImageCellLayout.Stretch;
        }

    Το οποίο χτυπάει ότι δεν μπορεί να κάνει cast το DataGridViewTextBoxColumn σε DataGridViewImageColumn.

    Τελικά κατέληξα στο άσχημο :
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        foreach (DataGridViewColumn column in dgv.Columns)
        {
            if (column.Name == "Img")
            {
                DataGridViewImageColumn dtgvic = new DataGridViewImageColumn();
                dtgvic = (DataGridViewImageColumn) column;
                dtgvic.ImageLayout = DataGridViewImageCellLayout.Stretch;
            }
        }

    Υπαρχει κάποιος καλύτερος τρόπος από τον έλεγχο του ονόματος της στήλης? Π.χ. να ελέγχεται ο τύπος της στήλης ότι είναι εικόνας?
    Δοκίμασα με την typeof και την GetType() αλλά δεν κατάφερα γιατί πάλι έχω το θέμα με το cast από το ένα στο άλλο.

  •  04-12-2010, 14:39 61283 σε απάντηση της 59840

    Απ: DataGridViewColumn και DataGridViewImageColumn

    Ο έλεγχος με τον τύπο της στήλης είναι σχετικά απλός, π.χ.

    foreach (DataGridViewColumn column in dgv.Columns)
    { 
         if(Type.Equals(column.GetType(),typeof(DataGridViewImageColumn)))
         {
            DataGridViewImageColumn dtgvic = (DataGridViewImageColumn)column;
            dtgvic.ImageLayout = DataGridViewImageCellLayout.Stretch;
          }
    }
    Ωστόσο το cast της στήλης δεν νομίζω ότι μπορείς να το αποφύγεις, αφού το Property ImageLayout είναι type specific
     
  •  04-12-2010, 18:24 61296 σε απάντηση της 61283

    Απ: DataGridViewColumn και DataGridViewImageColumn

    Ο σωστός και εύκολος τρόπος να ελέγχεις τον τύπο μίας μεταβλητής είναι το is ή το as. Μπορείς π.χ. να γράψεις if (column is DataGridViewColumn) και μετά να κάνεις το cast, ή να κάνεις απευθείας το cast με το as και μετά να ελέγξεις αν το αποτέλεσμα είναι null και να προχωρήσεις:

    forach (var column in dgv.Columns)
    {
        var imageColumn=column as DataGridViewImageColumn;
        imageColumn.ImageLayout=...
    }

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems