2009-01-15 5 views
3

J'ai deux DataGridViewComboBoxColumn que j'ajoute à l'exécution J'ai besoin que les éléments du premier DataGridViewComboBoxColumn restent les mêmes dans toutes les lignes de la grille, mais je veux que les éléments de la seconde DataGridViewComboBoxColumn soient différents d'une ligne à l'autre selon l'élément sélectionné de la première DataGridViewComboBoxColumnComment remplir chaque DataGridViewComboBoxCell avec des données différentes?

si nous disons que le premier DataGridViewComboBoxColumn représente les emplacements et le second DataGridViewComboBoxColumn pour représenter les sous-localisations. donc je veux que les deuxièmes éléments DataGridViewComboBoxColumn soient les sous-localisations de l'emplacement sélectionné à partir du premier DataGridViewComboBoxColumn

+0

Je suis dans le besoin d'aide :( –

+0

Sara, je voudrais vous aider - surtout après vous avoir donné du fil à retordre sur le libellé de cette question :). Cependant, je ne suis pas familier avec le DataGrid et devra l'étudier. Je n'aurai pas l'occasion de le faire avant d'arriver à la maison ce soir. P.S. Vous devriez vraiment fermer la première question. suite –

+0

Un des modérateurs fermera l'une des questions en double, vous pouvez choisir lequel fermer, ils peuvent fermer celui-ci. –

Répondre

1

Une idée serait d'utiliser une source de liaison secondaire pour la colonne "SubLocations". Cette BindingSource peut être filtrée par le LocationId sélectionné dans la colonne "Locations". La clé pour ce faire est d'utiliser les événements EditingControlShowing et CellValueChanged de la grille pour définir le filtrage approprié sur la colonne SubLocations lorsque l'emplacement sélectionné change.

Il existe un exemple here.

2

Une option est de changer la source de données au niveau cellulaire pour sublocations.

Supposant la grille est nommé grid et les deux colonnes de la grille ont été nommés locationsColumn respectivement subLocationsColumn:

private void Form1_Load(object sender, EventArgs e) 
{ 
    locationsColumn.DataSource = new string[] { "Location A", "Location B" }; 
} 

puis, sur l'événement de la grille CellEndEdit:

private void grid_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if(locationsColumn.Index == e.ColumnIndex) 
    { 
     DataGridViewComboBoxCell subLocationCell = 
      (DataGridViewComboBoxCell)(grid.Rows[e.RowIndex].Cells["subLocationsColumn"]); 

     string location = grid[e.ColumnIndex, e.RowIndex].Value as String; 

     switch (location) 
     { 
      case "Location A": 
       subLocationCell.DataSource = new string[] { 
        "A sublocation 1", 
        "A sublocation 2", 
        "A sublocation 3" 
       }; 
       break; 
      case "Location B": 
       subLocationCell.DataSource = new string[] { 
        "B sublocation 1", 
        "B sublocation 2", 
        "B sublocation 3" 
       }; 
       break; 
      default: 
       subLocationCell.DataSource = null; 
       return; 
     } 
    } 
} 

Certains un traitement supplémentaire est nécessaire lorsque l'emplacement changements pour les lignes existantes, mais c'est l'idée de base.

Questions connexes