Question

Je vais avoir quelques problèmes avec les éléments suivants:

  • Je veux obtenir la première colonne visible et congelée d'une collection de colonnes.

Je pense que cela va le faire:

DataGridViewColumnCollection dgv = myDataGridView.Columns;
dgv.GetFirstColumn(
     DataGridViewElementStates.Visible | DataGridViewElementStates.Frozen);
  • Est-il possible de faire un bitmask pour obtenir la première colonne congelée ou visible?
Était-ce utile?

La solution

La mise en œuvre est, autant que je sache, "tous ces" - il utilise:

((this.State & elementState) == elementState);

Ce qui est « tous ». Si vous voulez écrire un « tout de », peut-être ajouter une méthode d'assistance: (Ajouter le "ce" avant DataGridViewColumnCollection pour en faire une méthode d'extension C # 3.0 in)

    public static DataGridViewColumn GetFirstColumnWithAny(
        DataGridViewColumnCollection columns, // optional "this"
        DataGridViewElementStates states)
    {
        foreach (DataGridViewColumn column in columns)
        {
            if ((column.State & states) != 0) return column;
        }
        return null;
    }

Ou avec LINQ:

        return columns.Cast<DataGridViewColumn>()
            .FirstOrDefault(col => (col.State & states) != 0);

Autres conseils

Eh bien, bitmasks travaillent habituellement comme ceci:

| se joint drapeaux vers le haut. & est le filtrage sous-ensemble de drapeaux à partir d'un jeu de drapeau représentée par un masque binaire. ^ est renversant drapeaux par un masque (au moins en C / C ++).

Pour la première colonne congelée ou visible GetFirstColumn doit gérer bitmasks façon différente (par exemple GetFirstColumn pourrait obtenir la première colonne qui correspond à l'un des drapeaux fixés, mais ce n'est pas le cas).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top