none
utilisation de graph RRS feed

Réponses

  • Le mieux est de toujours être explicite sur le point où vous en êtes. Vous pouvez commencer par qq chose comme :

    Public Class Form1
        Private Function GetData() As DataTable
            Dim dt As New DataTable
            dt.Columns.Add("Légende", GetType(String))
            dt.Columns.Add("Valeur", GetType(Integer))
            dt.Rows.Add("A", 5)
            dt.Rows.Add("B", 4)
            dt.Rows.Add("C", 6)
            Return dt
        End Function
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Chart1.DataSource = GetData()
            Chart1.Series(0).XValueMember = "Légende"
            Chart1.Series(0).YValueMembers = "Valeur"
        End Sub
    End Class
    

    Le contrôle comporte déjà par défaut une série de données pour un histogramme. Donc dans le code, je me contente de définir des données de test et d'indiquer les colonnes à utiliser comme "légende" et comme "valeur".


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    dimanche 20 mai 2012 09:36
    Modérateur
  • Pour moi ce serait plutôt Chart <- Source -> DataGrid que Source -> DataGrid -> Chart.

    Je veux dire que la grille et le graphique puisent dans une source de donnée commune et non pas que la grille (qui est un contrôle de saisie) servira de source à un autre contrôle.

    J'essaierai de faire un exemple croyant comprendre que votre problème est de partager la source entre plusieurs formulaires ?? Sinon comme indiqué merci d'indiquer explicitement ce que vous essayez et le problème sinon il sera impossible d'avancer...

    L'approche que je propose serait donc au final dans le formulaire Form1 chargé d'afficher la grille avec bouton1 pour charger les données, bouton2 pour afficher le graphique dans une fenêtre séparée :

    Option Strict On
    Imports System.ComponentModel
    Public Class Form1
        Private Data As DataSet
        Private Function GetData() As DataSet
            ' Peux bien sûr récupérer les données depuis une base
            Dim ds As New DataSet
            Dim dt As New DataTable
            dt.TableName = "Product"
            dt.Columns.Add("wo_part", GetType(String))
            dt.Columns.Add("vm", GetType(Integer))
            dt.Rows.Add("A", 10)
            dt.Rows.Add("B", 15)
            dt.Rows.Add("C", 30)
            ds.Tables.Add(dt)
            Return ds
        End Function
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Data = GetData()
            DataGridView1.DataSource = Data
            DataGridView1.DataMember = "Product"
        End Sub
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            If Not Data Is Nothing Then
                Dim f As New Form2(Data)
                f.Show(Me)
            End If
        End Sub
    End Class

    Et donc Form2 avec un contrôle chart chargé d'afficher les données préalablement chargée :

    Public Class Form2
        Sub New(ByVal ds As DataSet)
            InitializeComponent()
            Chart1.DataSource = ds.Tables("Product")
            Chart1.Series(0).XValueMember = "wo_part"
            Chart1.Series(0).YValueMembers = "vm"
        End Sub
    End Class

    Et donc si on charge les données et que l'on modifie les données présentes en grille, la grille mets à jour sa source de données et quand on clique sur le bouton2 on passe bien cette source de données modifiée pour générer le graphique.

    Il faut bien distinguer la grille qui est un contrôle de saisie et n'a aucune donnée en elle-même de la source de données sous-jacente qui est modifiée au moyen de la grille de saisie et qui sert également à générer le graphique...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".




    mardi 22 mai 2012 16:27
    Modérateur

Toutes les réponses

  • Bonjour,

    Avez-vous essayé le contrôle Chart ? Voir http://msdn.microsoft.com/fr-fr/library/dd456753


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    samedi 19 mai 2012 20:33
    Modérateur
  • Bonjour,

    Avez-vous essayé le contrôle Chart ? Voir http://msdn.microsoft.com/fr-fr/library/dd456753


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    oui bien sur j'ai essayee avec chart, mé j'ai pa réussi je ne sais pas quoi mettre dedans(code de chart)  ,voici mon code de connexion mysql/datagridview qui fonctionne bien:

       

    Imports MySql.Data.MySqlClient


    Public Class production

        Dim con As MySqlConnection = New MySqlConnection("Data Source=localhost;Database=pfe;User ID=root;Password=root;")


        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim x As Chart
            x = New Chart
            x.Show()
        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim con As MySqlConnection = New MySqlConnection("Data Source=localhost;Database=pfe;User ID=root;Password=root;")
            Dim sql As MySqlCommand = New MySqlCommand("SELECT wo_part,wo_qty_rjct,year(wo_ord_date)as annee ,sum(wo_yield_pct)*(wo_qty_rjct)as vm from wo_mstr where wo_ord_date>wo_due_date and wo_part ='" + TextBox1.Text + "' and wo_status='" + TextBox3.Text + "' and year(wo_ord_date)='" + TextBox2.Text + "' ", con)

            Dim dt As New DataTable
            Dim ds As DataSet = New DataSet()

            Dim DataAdapter1 As MySqlDataAdapter = New MySqlDataAdapter()

            con.Open()

            DataAdapter1.SelectCommand = sql

            DataAdapter1.Fill(ds, "Product")

            DataGridView1.DataSource = ds

            DataGridView1.DataMember = "Product"


            con.Close()
        End Sub
    End Class

     ====>je veux que la résultat qui est affiché dans madatagridview sera presenter dans un histogramme et merci pour votre reponse :)


    sabi

    samedi 19 mai 2012 22:39
  • Le mieux est de toujours être explicite sur le point où vous en êtes. Vous pouvez commencer par qq chose comme :

    Public Class Form1
        Private Function GetData() As DataTable
            Dim dt As New DataTable
            dt.Columns.Add("Légende", GetType(String))
            dt.Columns.Add("Valeur", GetType(Integer))
            dt.Rows.Add("A", 5)
            dt.Rows.Add("B", 4)
            dt.Rows.Add("C", 6)
            Return dt
        End Function
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Chart1.DataSource = GetData()
            Chart1.Series(0).XValueMember = "Légende"
            Chart1.Series(0).YValueMembers = "Valeur"
        End Sub
    End Class
    

    Le contrôle comporte déjà par défaut une série de données pour un histogramme. Donc dans le code, je me contente de définir des données de test et d'indiquer les colonnes à utiliser comme "légende" et comme "valeur".


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    dimanche 20 mai 2012 09:36
    Modérateur
  • merci beaucoup pour votre reponse Mr,

    maintenant mon histogramme s'affiche mais avec des donnees statique(a=5,b=4,c=6) ,alors que je veux que les donnees seront les meme de ma datagrid, le probleme est que je n'arrive pas a manipuler les champs de datagrid ,j'ai pas pu les appelées 


    sabi

    lundi 21 mai 2012 19:16
  • Comme je disais merci d'être toujours explicite. Impossible de vous aider sans savoir ce que vous avez essayé et quel est le problème rencontré (message d'erreur ?). C'est quoi "appeler un champ" ?

    Je ne sais pas quels sont les champs que vous voulez utiliser pour le graphique mais je dirais par exemple que XValueMember pourrait être "wo_part" et YValueMember pourrait être "vm" ? Il se passe quoi quand vous essayez ?

    Ou le code tourne mais vous n'obtenez pas le résultat attendu ? Ce que je vois est que votre requête ne me semble pas être très adapté à un graphique (je me serais attendu à un "group by" pour regrouper les données).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    mardi 22 mai 2012 08:22
    Modérateur
  • les champs que je veux les affichees en histogramme sont :wo_part(code article) et vm (valeur manquante) , a mon avis il faut faire une liaison entre datagrid et chart pour qu'on puissent transmettre les donnees de datagrid vers chart. 

    Remarque : l'affichage de datagrid s'effectue dans forme1 et la chart dans forme2  


    sabi

    mardi 22 mai 2012 16:05
  • Pour moi ce serait plutôt Chart <- Source -> DataGrid que Source -> DataGrid -> Chart.

    Je veux dire que la grille et le graphique puisent dans une source de donnée commune et non pas que la grille (qui est un contrôle de saisie) servira de source à un autre contrôle.

    J'essaierai de faire un exemple croyant comprendre que votre problème est de partager la source entre plusieurs formulaires ?? Sinon comme indiqué merci d'indiquer explicitement ce que vous essayez et le problème sinon il sera impossible d'avancer...

    L'approche que je propose serait donc au final dans le formulaire Form1 chargé d'afficher la grille avec bouton1 pour charger les données, bouton2 pour afficher le graphique dans une fenêtre séparée :

    Option Strict On
    Imports System.ComponentModel
    Public Class Form1
        Private Data As DataSet
        Private Function GetData() As DataSet
            ' Peux bien sûr récupérer les données depuis une base
            Dim ds As New DataSet
            Dim dt As New DataTable
            dt.TableName = "Product"
            dt.Columns.Add("wo_part", GetType(String))
            dt.Columns.Add("vm", GetType(Integer))
            dt.Rows.Add("A", 10)
            dt.Rows.Add("B", 15)
            dt.Rows.Add("C", 30)
            ds.Tables.Add(dt)
            Return ds
        End Function
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Data = GetData()
            DataGridView1.DataSource = Data
            DataGridView1.DataMember = "Product"
        End Sub
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            If Not Data Is Nothing Then
                Dim f As New Form2(Data)
                f.Show(Me)
            End If
        End Sub
    End Class

    Et donc Form2 avec un contrôle chart chargé d'afficher les données préalablement chargée :

    Public Class Form2
        Sub New(ByVal ds As DataSet)
            InitializeComponent()
            Chart1.DataSource = ds.Tables("Product")
            Chart1.Series(0).XValueMember = "wo_part"
            Chart1.Series(0).YValueMembers = "vm"
        End Sub
    End Class

    Et donc si on charge les données et que l'on modifie les données présentes en grille, la grille mets à jour sa source de données et quand on clique sur le bouton2 on passe bien cette source de données modifiée pour générer le graphique.

    Il faut bien distinguer la grille qui est un contrôle de saisie et n'a aucune donnée en elle-même de la source de données sous-jacente qui est modifiée au moyen de la grille de saisie et qui sert également à générer le graphique...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".




    mardi 22 mai 2012 16:27
    Modérateur
  • merci beaucoup patrice ,

    en fin j'ai trouvée la solution ,merci pour votre attention  et bonne journée 


    sabi

    jeudi 24 mai 2012 18:21
  • bonjour patrice,

    je travaille avec la table (qc_mstr) qui contient les champs suivant:(qc_part,qc_nbr,qc_status ...) et le champ qui m'interesse le plus c'est (qc_status) de type numeric ,voici un exemple pour bien me comprendre:

    qc_status =2  =======>le status de l'article est "accepté"  (A)

    qc_status =3  =======>le status de l'article est "non conforme" (R)

    qc_status =4  =======>le status de l'article est "non applicable" (NA)

    mon adjectif est de calculer le taux de non conformité et voici la formule:

    RESULTAT=somme (A) / (somme(A)+somme(R)+somme(NA)

    maintenant je veux afficher cette resultat dans une datgrid et voici ma requete:

    "SELECT qc_nbr,qc_part,qc_status  from qc_mstr where qc_part like'%" + TextBox1.Text + "%'"

    j’espère que vous pouvez m'aider et j’espère aussi que j'ai bien expliquée mon problème :)


    sabi

    vendredi 25 mai 2012 13:24
  • Bonjour,

    Pour moi cela serait qq chose comme (non testé) :

    SELECT a.qc_part,1.0*ISNULL(Acceptés,0)/Nombre FROM

    (

       (SELECT qc_part,COUNT(*) AS Nombre FROM Articles GROUP BY qc_part) a

    LEFT JOIN (SELECT qc_part,COUNT(*) AS Acceptés FROM Articles WHERE qc_status=2 GROUP BY qc_part) b ON b.qc_part=a.qc_part

    ) x

    cad dire :

    - je compte le nombre total de lignes par articles
    - je rapproche avec le nombre total de lignes par article et uniquement pour les "acceptés"

    Poster éventuellement dans un forum SQL Server, également votre question sera plus visible si vous créez une nouvelle question plutôt que la poser dans une question déjà résolue.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    samedi 26 mai 2012 21:04
    Modérateur