Meilleur auteur de réponses
utilisation de graph

Question
-
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".
- Proposé comme réponse Ciprian Duduiala mardi 22 mai 2012 06:44
- Marqué comme réponse Ciprian Duduiala jeudi 24 mai 2012 07:45
-
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".
- Modifié Patrice ScribeMVP, Moderator mardi 22 mai 2012 17:00
- Marqué comme réponse Ciprian Duduiala jeudi 24 mai 2012 07:45
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".
-
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
-
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".
- Proposé comme réponse Ciprian Duduiala mardi 22 mai 2012 06:44
- Marqué comme réponse Ciprian Duduiala jeudi 24 mai 2012 07:45
-
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
-
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".
- Modifié Patrice ScribeMVP, Moderator mardi 22 mai 2012 08:24
-
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
-
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".
- Modifié Patrice ScribeMVP, Moderator mardi 22 mai 2012 17:00
- Marqué comme réponse Ciprian Duduiala jeudi 24 mai 2012 07:45
-
-
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
-
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".