none
datagridview!!! RRS feed

  • Discussion générale

  • bonjours

    ayant du mal a m'éxprimer par ecri car je suis handicapé pouvez vous prendre le temp de regarder svp ce lien : http://www.youtube.com/watch?v=zxcJsOCy4Pw&feature=youtu.be

    merci d'avance !!!


    dubarre

    jeudi 29 novembre 2012 06:23

Toutes les réponses

  • Bonjour dubarre,

    Le Contrôle DataGridView, lorsqu'il n'y a pas de DataSource attachée, ne dispose pas de méthode "Find" (qui s'effectue alors sur le DataSource). Il te faut donc coder toi même cette recherche. En conservant le principe du bouton 'Rechercher' sur la feuille du DataGridView, tu peux t'inspirer, en l'adaptant, de ce code :

    How to Search values in Datagridview 

    NB : la recherche s'y fait sur une colonne donnée.


    Cordialement, Jacques


    • Modifié Jacques93 jeudi 29 novembre 2012 12:37
    jeudi 29 novembre 2012 12:36
  • Bonjours

    je vous envoi ce code j'ai fait l'essai quil donne mais ya une erreur mi en gras et souligné ci-dessous et je trouve pas la soluce stp merki d'avance 

    Public Class frmtest

        Private Sub frmtest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '' '<summary>
            '' 'Recherche dans un article sur datagridview.
            '' '</ summary>
            '' '<param name="dtg"> Le Datagridview à rechercher. </ param>
            '' '<param name="ColumnName"> la colonne à la recherche sur. </ param>
            '' '<param name="ValueToSearch"> La Valeur à rechercher. </ param>
            '' '<returns> Retourne une valeur booléenne </ returns>
            '' '<remarks> Par Nolan Sunico </ remarks>

        End Sub

        Public Shared Function SearchGridValue(ByVal dtg As DataGridView, ByVal ColumnName As String, ByVal ValueToSearch As String) As Boolean

            Dim Found As Boolean = False
            Dim StringToSearch As String = ""
            Dim ValueToSearchFor As String = ValueToSearch.Trim.ToLower
            Dim CurrentRowIndex As Integer = 0
            Try
                If dtg.Rows.Count = 0 Then
                    CurrentRowIndex = 0
                Else
                    CurrentRowIndex = dtg.CurrentRow.Index + 1
                End If
                If CurrentRowIndex > dtg.CurrentRow.Index + 1 Then
                    CurrentRowIndex = dtg.Rows.Count - 1
                End If
                If dtg.Rows.Count > 0 Then
                   For Each gRow As DataGridViewRow In dtgData.Rows
                        StringToSearch =
                           gRow.Cells(ColumnName).Value.ToString.Trim.ToLower
                        If StringToSearch.Contains(ValueToSearchFor) Then
                            Dim mycurrentcell As DataGridViewCell =
                               gRow.Cells(ColumnName)
                            dtg.CurrentCell = mycurrentcell
                            Found = True
                        End If
                        If Found Then
                            Exit For
                        End If
                End If
            Catch ex As Exception
                MsgBox("Error: " & ex.Message, MsgBoxStyle.Information)
            End Try
            Return Found
        End Function

        Private Sub btnAddData_Click(ByVal sender As System.Object,
            ByVal e As System.EventArgs) Handles btnAddData.Click
            Try
                If SearchGridValue(Me.dtgData, "Data1", Me.txtData1.Text) Then
                    MessageBox.Show(Me.txtData1.Text & " already in the list!")
                    Exit Sub
                End If
                dtgData.Rows.Add(Me.txtData1.Text, Me.txtData2.Text)
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    End Class


    dubarre

    jeudi 29 novembre 2012 14:09
  • le code marche mais pourquoi il me met dans une fenêtre

    Error:la reference d'objet n'est pas définie à une instance d'un objet 

    sa veus dire koi stp !!!

    merci d'avance 


    dubarre


    • Modifié dubarre jeudi 29 novembre 2012 14:22
    jeudi 29 novembre 2012 14:17
  • Il y a effectivement une erreur : Il faut remplacer dtgData.Rows par dtg.Rows. Il manque également le Next, ce qui donne :

                If dtg.Rows.Count > 0 Then
                    For Each gRow As DataGridViewRow In dtg.Rows
                        StringToSearch =
                           gRow.Cells(ColumnName).Value.ToString.Trim.ToLower
                        If StringToSearch.Contains(ValueToSearchFor) Then
                            Dim mycurrentcell As DataGridViewCell =
                               gRow.Cells(ColumnName)
                            dtg.CurrentCell = mycurrentcell
                            Found = True
                        End If
                        If Found Then
                            Exit For
                        End If
                    Next 

    En fait il faut attendre que la page ait bien fini de se charger avant  de faire le copier / coller, et c'est OK.


    Cordialement, Jacques

    jeudi 29 novembre 2012 14:39
  • dans la ligne :

    If SearchGridValue(Me.dtgData, "Data1", Me.txtData1.Text) ...

    il faut que tu remplaces "Data1" par le nom d'une de tes colonnes. Dans le projet que j'avais mis sur cjoint je les avais nommées Références, Matière, Marque, etc. Tu peux le voir en sélectionnant le DataGridView -> Propriétés -> Columns

    Par exemple :

    If SearchGridValue(Me.dtgData, "Marque", Me.txtData1.Text)

    Dans ta fenêtre de recherche, plutôt que d'avoir seulement le texte à rechercher, tu pourrait avoir un combobox permettant d'indiquer la colonne dans laquelle rechercher, une recherche sur la quantité n'est peut être pas utile ... mais c'est juste mon point de vue.


    Cordialement, Jacques

    jeudi 29 novembre 2012 14:49
  • re,

    j'ai essayer sa en rajoutant une combobox mais sa veut pas jsuis vraiment dsle mais la j'ai tournée le truc dans tous les sens

    et je bugs dslé de tembeter

    merci d'avance !!!

    Public Class RECHERCHES

        Private Sub FermerRECH_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FermerRECH.Click
            Me.Hide()
        End Sub

        Private Sub txtresultats_load(ByRef sender As System.Object, ByVal e As System.Object, ByVal e As System.EventArgs) Handles txtresultats.SelectedIndexChanged
            txtresultats.Visible = False
        End Sub
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
            If ComboBox1.SelectedItem = "HUILES" Then
            End If
        End Sub

        Private Sub RECHERCHES_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        End Sub
    End Class

    Private Sub RECHERCHES_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.RECHERCHES_Load
        '' '<summary>
        '' 'Recherche dans un article sur datagridview.
        '' '</ summary>
        '' '<param name="dtg"> Le Datagridview à rechercher. </ param>
        '' '<param name="ColumnName"> la colonne à la recherche sur. </ param>
        '' '<param name="ValueToSearch"> La Valeur à rechercher. </ param>
        '' '<returns> Retourne une valeur booléenne </ returns>
        '' '<remarks> Par Nolan Sunico </ remarks>

    End Sub

    Public Shared Function SearchGridValue_click(ByVal dtg As DataGridView, ByVal ColumnName As String, ByVal ValueToSearch As String) As Boolean

        Dim Found As Boolean = False
        Dim StringToSearch As String = ""
        Dim ValueToSearchFor As String = ValueToSearch.Trim.ToLower
        Dim CurrentRowIndex As Integer = 0
        Try
            If dtg.Rows.Count = 0 Then
                CurrentRowIndex = 0
            Else
                CurrentRowIndex = dtg.CurrentRow.Index + 1
            End If
            If CurrentRowIndex > dtg.CurrentRow.Index + 1 Then
                CurrentRowIndex = dtg.Rows.Count - 1
            End If
            If dtg.Rows.Count > 0 Then
                For Each gRow As DataGridViewRow In dtgData.Rows
                    StringToSearch =
                       gRow.Cells(ColumnName).Value.ToString.Trim.ToLower
                    If StringToSearch.Contains(ValueToSearchFor) Then
                        Dim mycurrentcell As DataGridViewCell =
                           gRow.Cells(ColumnName)
                        dtg.CurrentCell = mycurrentcell
                        Found = True
                    End If
                    If Found Then
                        Exit For
                    End If
                End If
        Catch ex As Exception
            MsgBox("Error: " & ex.Message, MsgBoxStyle.Information)
        End Try
        Return Found
    End Function

    Private Sub txtrech_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtrech.Click
        Try
            If SearchGridValue(Me.dtgData, "MATIÈRES", Me.dgvhuiles.Text) Then
                MessageBox.Show(Me.txtData1.Text & " already in the list!")
                Exit Sub
            End If
            dtgData.Rows.Add(Me.dgvhuiles.Text)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub


    dubarre

    jeudi 29 novembre 2012 17:04
  • Bonjour dubarre,

    Heu, à vrai dire, si je pense comprendre ce que tu veux faire, j'ai vraiment du mal à déchiffrer ton code. Par exemple :

    Private Sub txtresultats_load(ByRef sender As System.Object, ByVal e As System.Object, ByVal e As System.EventArgs) Handles txtresultats.SelectedIndexChange

    A quoi correspond 'txtresultats' ? Une Form (load), un ComboBox (selectedindexchange) ou un TextBox (capture écran). En tout cas il semble y avoir une certaine confusion.

    Par ailleurs le code indiqué dans How to Search values in Datagridview  ne semble pas avoir été adapté à tes besoins et on ne sait pas où tu as inséré le code, une feuille, un module ? Son but est de savoir si un élément y est déjà présent, ton but est de chercher toutes les occurrences d'un élément. Si la méthode de balayage du DataGridView peut rester la même, l'utilisation des résultats doit être repensée.

    Plutôt que d'indiquer des bribes de code, je dépose sur http://cjoint.com/?0KEf6UPmcFi un petit proto, tu pourras ainsi y voir comment est agencé le programme. Ce n'est pas l'unique solution, mais j'ai essayé de suivre ce que tu as indiqué dans la vidéo.


    Cordialement, Jacques

    vendredi 30 novembre 2012 05:32
  • Bonjour,

    Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 4 décembre 2012 08:37