Datagridview en c#

Fermé
tatinba - 23 mai 2010 à 10:32
 tatinba - 24 mai 2010 à 12:02
Bonjour, je programme en c#,j'ai datagridview avec une colonne de type combobox,à qui je charge la liste de tous les enseignants,ce datagridvew sert pour designer le conseil administratif(le directeur,les membres du conseil descipline).je veux quand je selectionne un enseigant et je passe au prochain row l'enseignant déjà selectionner ne doit pas figurer sur la liste des enseignants.comment je peux le faire.je vous remercie.



4 réponses

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
Modifié par chuka le 23/05/2010 à 12:33
Salut,
tu peux t'inspirer de cela:
en ajoutant l'event à ton datagridview:
dataGridView1.CellValidated += new DataGridViewCellEventHandler(onChangeCell);
private void onChangeCell(object sender, DataGridViewCellEventArgs e) 
        { 
            DataGridView dg = sender as DataGridView; 
            if (e.ColumnIndex == 4)//4 parceque dans mon test, la colonne 4 est de type DataGridViewComboBoxCell 
            { 
                for (int i = 0; i < dg.Rows.Count - 1; i++) 
                { 
                    if (i != e.RowIndex) 
                        (dg[e.ColumnIndex, i] as DataGridViewComboBoxCell).Items.Remove(dg[e.ColumnIndex, e.RowIndex].Value); 

                } 
            } 
        } 

Y'aura certainement des probleme à gerer du type:
changement d'un nom dans une cellule où un nom a déjà été selectionné etc...
J'espere ca pourra t'aider...
@+
Ce n'est pas parce que certaines choses semblent inexplicables, qu'il faut faire semblant de les expliquer!
0
merci beaucoup à vous de m'avoir répondu,j'ai compris la démarche,mais j'ai un ptit probleme,où je dois ajouter cette ligne:dataGridView1.CellValidated += new DataGridViewCellEventHandler(onChangeCell);
merci encore une fois.
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
23 mai 2010 à 14:31
le plus simple est d'ouvrir ta form-> selectionner ton datagridview, et tu as les propriétés et events (de ton datagridview) que tu peux modifier.
Tu double clique sur l'event CellValidated et tu copies le code de la fonction onChangeCell dans la fonction que l'IDE vas t'avoir crée...
@+
0
ça marche pas avec moi,mais est ce que vous pouvez me dire comment je peux récuperer la valeur de la cellule precedente dans la meme colonne?et l'afficher dans messagebox
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
Modifié par chuka le 23/05/2010 à 16:50
je comprends pas trop ce que tu veux faire...le code ci-dessus fonctionne chez moi...donc y'a pas de raison qu'il ne fonctionne pas chez toi!!;)
comment je peux récuperer la valeur de la cellule precedente dans la meme colonne
Tu recupere les datas de chaque celulle grace à du code du type:
Si ton datagridview se nomme dg
dg["nom_de_la_colonne", index].Value
0
bonjour à vous, je vous explique mon probleme:
dan mon form j'ai datagridview qui me sert pour designer les 8 membres du conseil administratif d'un etablissement scolaire,avec deux colonnes:

1.matricule:est de type datgridcomboboxcolumn,et contient les matricules de tous les enseignants que je selectione à partir de ma base de données, je la relie ainsi: this.Column1.DataSource = bindingSource1;
this.Column1.DisplayMember = "matricule"; this.Column1.ValueMember = "matricule";

2.Poste:est de type datgridcomboboxcolumn,avec une collection d'item(Proveseur,conseil descipline).

le conseil doit contenir 1 seul proveseur et 7 membres du conseil de discipline.
,donc l'utilisateur slectionne une matricule d'un enseignant et le poste occupé par ce dernier,et ainsi de suite jusqu'à atteindre les 8 membres.

ce que je veux faire est que une fois que l'utilisateur passe à la prochaine ligne de datagridview,je récupere la matricule selectionné précedement et la supprime du la liste des matricules pour qu'il n yaura pas de répétitions.
je fais ça dans l'évenement CellLeave:

item = dgvmembres[0, e.RowIndex].Value.ToString();
try
{
this.Column1.Items.Remove(item);
}
catch (Exception ex) { MessageBox.Show(ex.Message); }

et j'aurai cette exception:Object reference not set to an instance of an object au niveu de récupération de l'item.j'espere que jété clair et j'espere que j'aurai une réponse de votre part.
0