locked
Filtrer DataGridView par Années extraites de dates d'une combobox. RRS feed

  • Question

  • Salut à tous.

    j'ai un DataGridView appelé "TblCongésDataGridView" (lié à une table Access "TblCongés"), et dont le DataSource est "TblCongésBindingSource". il contient entre autre des données sous forme de dates.

    Et j'ai une combobox "cboAnnée" avec laquelle je veux filtrer le DataGridView en fonction des Années des dates qui'il contient, mais je ne parviens pas à extraire les années des dates et les afficher dans la combobox et puis filtrer le DataGridView !!

    ceci fait afficher les dates et le DataGridView est filtré :

    Code Snippet

    cboAnnée.DataSource = TblCongésBindingSource

    cboAnnée.DisplayMember = "Date de Cessation"

     

    Mais pour les années, j'ai essayé de faire ceci :

    Pour n'afficher que les années dans la combobox :

    Code Snippet

    cboAnnée.DisplayMember = Year(GRHDataSet1.tblCongés(TblCongés _(Date_De_Cessation))

    ou:

    Code Snippet

    cboAnnée.DisplayMember = Year(GRHDataSet1.Tables _(TblCongésBindingSource.Item(DateDeCessationDataGridViewTextBoxColumn))

     

    Pour filtrer le DataGridView par les Années:

    Code Snippet

    TblCongésBindingSource.Filter = Year(TblCongésDataGridView.Columns.Item _(0).Index)

     

    Mais en vain !!

    Et merci pour votre aide. (P.S: je débute en VB.Net.)

    lundi 21 avril 2008 21:31

Réponses

  • Merci infiniment Gilles.

    Voilà ce que j'ai fait :

    D'abord j'ai créé une requête dans ma base de donnée à partir de ma table "tblCongés", qui contient l'expression : Année([Date de Cessation]), et je l'ai ajouté aux sources de données. Puis, j'ai créé une relation (appelée "FKtblPersonnelreqtblCongésBindingSource") dans le DataSet à l'aide du concepteur entre ma requête et mon autre table "tblPersonnel" et j'ai changé les DataSource de mes 2 DataGridView et de ma combobox comme suit :

     

    Code Snippet

    Private Sub frmCongés_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TblPersonnelDataGridView.DataSource = TblPersonnelBindingSource
            TblCongésDataGridView.DataSource = FKtblPersonnelreqtblCongésBindingSource

            cboAnnée.DataSource = ReqtblCongésBindingSource
            cboAnnée.DisplayMember = "Année"
     
            Me.ReqtblCongésTableAdapter.Fill(Me.GRHDataSet1.reqtblCongés)
            Me.TblPersonnelTableAdapter.Fill(Me.GRHDataSet1.tblPersonnel)
        End Sub

     

    Et :

    Code Snippet
    Private Sub cboAnnée_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboAnnée.SelectedIndexChanged
            FKtblPersonnelreqtblCongésBindingSource.Filter = "Année = '" & cboAnnée.Text & "'"
        End Sub

     

     

    Et ça marche bien.

    Merci.


     

    mardi 22 avril 2008 18:09

Toutes les réponses

  • Bonjour,

     

    Un moyen simple et pro est d'utiliser les tripes des SGBD :

    Vous créez une Table(ou TableAdapter) qui contient uniquement une rubrique Année.

     

    Vous executez la requête suivante :

    SELECT Année FROM TblCongés GROUP BY Année ORDER BY Année

     

    Ainsi vous récupérez uniquement les différentes années présentes dans TblCongés, et vous pouvez remplir votre ComboBox grâce à cette petite table !

    Performance garantie ! Car vous faites rugir uniquement votre SGBD...

     

    Etant donné que vous êtes débutant, si je suis allé trop vite, faites le moi savoir !

     

    Cordialement

    mardi 22 avril 2008 07:19
  • Merci infiniment Gilles.

    Voilà ce que j'ai fait :

    D'abord j'ai créé une requête dans ma base de donnée à partir de ma table "tblCongés", qui contient l'expression : Année([Date de Cessation]), et je l'ai ajouté aux sources de données. Puis, j'ai créé une relation (appelée "FKtblPersonnelreqtblCongésBindingSource") dans le DataSet à l'aide du concepteur entre ma requête et mon autre table "tblPersonnel" et j'ai changé les DataSource de mes 2 DataGridView et de ma combobox comme suit :

     

    Code Snippet

    Private Sub frmCongés_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TblPersonnelDataGridView.DataSource = TblPersonnelBindingSource
            TblCongésDataGridView.DataSource = FKtblPersonnelreqtblCongésBindingSource

            cboAnnée.DataSource = ReqtblCongésBindingSource
            cboAnnée.DisplayMember = "Année"
     
            Me.ReqtblCongésTableAdapter.Fill(Me.GRHDataSet1.reqtblCongés)
            Me.TblPersonnelTableAdapter.Fill(Me.GRHDataSet1.tblPersonnel)
        End Sub

     

    Et :

    Code Snippet
    Private Sub cboAnnée_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboAnnée.SelectedIndexChanged
            FKtblPersonnelreqtblCongésBindingSource.Filter = "Année = '" & cboAnnée.Text & "'"
        End Sub

     

     

    Et ça marche bien.

    Merci.


     

    mardi 22 avril 2008 18:09