DataGridView chercher des doublons avec la valeur de 2 colonnes

Signaler
Messages postés
7
Date d'inscription
vendredi 7 juin 2019
Statut
Membre
Dernière intervention
30 janvier 2020
-
Messages postés
14866
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 mai 2020
-
Bonjour,

j'ai une colonne date_rendezvous et une colonne commercial.

ce que je veux, c'est si je choisi un commercial pour un rendez-vous je dois effectuer un test sur toutes les ligne de ma DataGridView pour voir si ce commercial a déjà un rendez-vous pour cette date.
si oui un message doit me stoper si non je passe.

merci d'avance.

10 réponses

Messages postés
14866
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 mai 2020
408
Bonsoir

Ton datagridview est il bindé à une source de données ?
Messages postés
7
Date d'inscription
vendredi 7 juin 2019
Statut
Membre
Dernière intervention
30 janvier 2020

bonsoir,

oui, et ma colonne commercial et type DataGridViewComboBoxColumn.

merci
Messages postés
14866
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 mai 2020
408
Alors c’est sur la source de données qu’il faut faire la recherche.
De quel type est elle?
Messages postés
7
Date d'inscription
vendredi 7 juin 2019
Statut
Membre
Dernière intervention
30 janvier 2020

bonjour,

BDD SQL
Messages postés
7
Date d'inscription
vendredi 7 juin 2019
Statut
Membre
Dernière intervention
30 janvier 2020

bonjour,

le problème c'est comment combiner les deux colonnes pour la recherche.
Messages postés
14866
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 mai 2020
408
Y’a pas d'histoire de colonne.

Tu as une base de données, un outil créé pour stocker des données typées et faire de recherches dessus, donc tu fais une requête avec une condition sur le champ date et une sur le champ commercial.

Dans le datagridview ça affiche du texte (pas une date, car une date c’est un nombre, mais un texte qui décrit la date) et c’est pas prévu pour faire des recherches.
Évidemment c’est possible en convertissant le texte en date et en faisant des boucles. Mais sql fait déjà ça de façon performante pourquoi réinventer la roue?
Messages postés
7
Date d'inscription
vendredi 7 juin 2019
Statut
Membre
Dernière intervention
30 janvier 2020

Bonsoir
voilà mon code mais il ne répond pas à mon besoin.

For i As Integer = 0 To GridView5.DataRowCount - 1

            'dts.Clear()
            sql = "select SV_Formation.* from SV_Formation where "
            If GridView5.GetRowCellValue(i, "Formateur").ToString <> "" Then sql = sql & "Formateur = '" & GridView5.GetRowCellValue(i, "Formateur").ToString & "' and "
            Try
                Dim date1 As Date
                date1 = CDate(GridView5.GetRowCellValue(i, "date_Formation").ToString)

                If date1.ToString = 10 Then sql = sql & " Date_Formation = '" & date1 & "' and "
            Catch ex As Exception
            End Try

            sql = sql & "ID > 0"


            cnx = Nothing
            cmd = Nothing
            dr = Nothing
            Try
                cnx = New SqlConnection(conn)
                cmd = New SqlCommand(sql, cnx)

                ' Ouvrir la connexion 
                cnx.Open()
                dr = cmd.ExecuteReader()


                If dr.HasRows Then


                    MessageBox.Show("BLA BLA BLA", "Message d'infos....", MessageBoxButtons.OK, MessageBoxIcon.Error)

                    Exit Sub

                End If
            Catch ex As Exception

                MessageBox.Show(ex.Message)
            Finally
                If Not (dr Is Nothing) Then dr.Close()
                If Not (cnx Is Nothing) Then cnx.Close()
            End Try
        Next
Messages postés
14866
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 mai 2020
408
Pour poster correctement un code voici un petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Entre ce que je crois comprendre de ton message initiale, et ce que je crois décrypter dans ton code, y'a un truc qui m'échappe.

Déjà, tu as parlé de Datagridview et dans ton code c'est GridView, se sont 2 contrôles assez différents, à moins que tu aies eu la mauvaise idée d'appeler un datagridview gridview. Merci donc de confirmer.
Il me semble d'ailleurs, que par défaut, le gridview ne soit disponible qu'en WPF, là encore merci de préciser Winform ou WPF?

L'opérateur choisi une date, puis sélectionne un commercial, et à ce moment là si le commercial est déjà pris tu veux une alerte.
C'est bien ça?

Si oui, ça n'est pas la peine d'itérer toutes les lignes, seule celle en cours est utile pour le test.

Y'a longtemps que j'ai pas fait de VB, mais ça je ne pense pas que ça marche
If date1.ToString = 10 Then

date1.ToString va retourner devrait retourner un truc du genre
"30/01/2020"
pas 10, en plus 10 c'est un Integer que tu compares à une string.

Enfin, d'un point de vue ergonomie, il me semble plus efficace, qu'une fois la date choisie, la liste des commerciaux disponibles apparaissent. Permettre une "mauvaise" saisie c'est une perte de temps, un message d'erreur aussi et en plus c'est agaçant (souvent, l'utilisateur ne le lit même pas).
D'ailleurs, si tu codes en WPF, alors charger ta base données dans une collection<T> et passer par le modèle MMVC est presque un jeu d'enfant et chaque ligne disposerait dynamiquement d'une combobox avec uniquement les commerciaux disponibles
bonjour,
 If date1.ToString = 10 Then

c'est juste un test d'un champ date et pas = 10.

de toute façon je vous remercie beaucoup j'ai trouvé la solution.
j'ai obtenu mes valeurs avec un selectedrows et j'ai mis une requête sql pour trouver les doublons.
Messages postés
14866
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
26 mai 2020
408
Une date de rendez-vous ne sera jamais 10’
10 en format « heure de fichier windows » c’est le 01/01/1601 à 01:00:00
en timestamp c’est le 01/01/1970 à 00:00:10
En AO date (ou Tick) c’est le 09/01/1900 à 00:00:00

A moins que tu ne prennes des rendez vous dans le passé ce test sera toujours faux