Auteur de questions
Un calcul un peu spécial

Question
-
Plop !
Celui qui dit que jfais pas vivre le forum c'est un menteur
.
L'idée ici est que:
dans ma base de donnée, ma table xdb_recette contient le champ price (prix ^^).
et qu'il est initialisé à 0.
Maintenant nous rajoutons des composants. le prix va changé. L'idée est donc que dans ma form "frmViewRecette" j'inclue la requete suivante:
SELECT xdb_recettecomposant.recette, sum(qt), sum(qt * price) / sum(qt) priceperkg
FROM xdb_element
INNER JOIN xdb_recettecomposant ON xdb_element.id = xdb_recettecomposant.element
GROUP BY recetteça me calcul le prix total, et de la, je le INSERT dans ma table recette, qui l'affiche en même temps que toutes mes recettes. ? C'est comme faire un chemin inverse quoi ^^.
Jsais pas si jsuis compréhensible :/
Meilleure salutation
Toutes les réponses
-
Bonjour,
1/Il est impossible que les TableAdapter/DataAdater génère des insert à partir des jointures... (Trop complexes)
2/Il y a redondance dans votre base de données le fait de vouloir mettre le prix de la recette alors que vous pouvez le calculer automatiquement via une requête SQL...
Cordialement
-
Hello,
Merci pour ta réponse,
Je vais donc simplement utiliser la requête.
Je l'ai ici dans la form "frmEditRecette":
bool
bTotalPrice = mydatabase.SelectRecette("SELECT xdb_recettecomposant.recette, sum(qt), sum(qt * price) / sum(qt) priceperkg FROM xdb_element INNER JOIN xdb_recettecomposant ON xdb_element.id = xdb_recettecomposant.element WHERE recette=" + _idRecette + ";");Comment faire maintenant pour afficher ce résultat dans mon
toolStripStatusLabel1 ?
Point 2:
Une fois que 1 produit est enregistrer dans la recette, je veux pouvoir modifié et enregistrer directement la quantitié par le dataGridView. Il n'a donc pas de readOnly = true, mais, si je le modifie, sa n'enregistre pas dans la base de donnée ni ne recalcul le prix.
Code de la form:
using
System;using
System.Collections.Generic;using
System.ComponentModel;using
System.Data;using
System.Drawing;using
System.Text;using
System.Windows.Forms;using
ComponentFactory.Krypton.Toolkit;namespace
TheProject{
public partial class frmEditRecette : ComponentFactory.Krypton.Toolkit.KryptonForm{
private int _idRecette; public int IdRecette{
get { return _idRecette; } set { _idRecette = value; }}
private int _idProduct; public int IdProduct{
get { return _idProduct; } set { _idProduct = value; }}
private void dataBaseReload(){
dataBase mydatabase = new dataBase("localhost", "theproject", "root"); bool connectionStatus = mydatabase.SelectRecette("SELECT xdb_element.id, xdb_element.name, xdb_element.price, xdb_category.name category, xdb_recette.name recette, xdb_recettecomposant.qt FROM xdb_element INNER JOIN xdb_recettecomposant ON xdb_element.id = xdb_recettecomposant.element INNER JOIN xdb_recette ON xdb_recettecomposant.recette = xdb_recette.id INNER JOIN xdb_category ON xdb_element.category = xdb_category.id WHERE recette=" + _idRecette + ";");kryptonDataGridView1.DataSource = mydatabase.myDataTable;
//kryptonDataGridView1.Columns["id"].Visible = false;kryptonDataGridView1.Columns[
"name"].HeaderText = "Nom";kryptonDataGridView1.Columns[
"category"].HeaderText = "Catégorie";kryptonDataGridView1.Columns[
"qt"].HeaderText = "Quantité";kryptonDataGridView1.AutoGenerateColumns =
true;kryptonDataGridView1.Refresh();
DataTable table = (DataTable)kryptonDataGridView1.DataSource; bool bTotalPrice = mydatabase.SelectRecette("SELECT xdb_recettecomposant.recette, sum(qt), sum(qt * price) / sum(qt) priceperkg FROM xdb_element INNER JOIN xdb_recettecomposant ON xdb_element.id = xdb_recettecomposant.element WHERE recette=" + _idRecette + ";");toolStripStatusLabel1.Text =
"Prix total: " + totalPrice.ToString() + "CHF";}
public frmEditRecette(){
InitializeComponent();
}
private void toolStripButton1_Click(object sender, EventArgs e){
frmAddTheToRecette _frmAddTheToRecette = new frmAddTheToRecette();_frmAddTheToRecette.ShowDialog();
dataBaseReload();
}
private void toolStripButton2_Click(object sender, EventArgs e){
frmAddAromToRecette _frmAddAromToRecette = new frmAddAromToRecette();_frmAddAromToRecette.ShowDialog();
dataBaseReload();
}
private void toolStripButton3_Click(object sender, EventArgs e){
frmAddDecoToRecette _frmAddDecoToRecette = new frmAddDecoToRecette();_frmAddDecoToRecette.ShowDialog();
dataBaseReload();
}
private void frmEditRecette_Load(object sender, EventArgs e){
dataBaseReload();
}
private void toolStripButton4_Click(object sender, EventArgs e){
dataBase mydatabase = new dataBase("localhost", "theproject", "root"); bool insertArome = mydatabase.updateAll("DELETE FROM xdb_recetteComposant WHERE id=" + kryptonDataGridView1.CurrentRow.Cells["id"].Value.ToString() + ""); MessageBox.Show("Suppression des données effectuées avec succès", "suppression", MessageBoxButtons.OK, MessageBoxIcon.Information);dataBaseReload();
}
}
}
-
Gilles TOURREAU A écrit: 2/Il y a redondance dans votre base de données le fait de vouloir mettre le prix de la recette alors que vous pouvez le calculer automatiquement via une requête SQL...
Effectivement, Gilles à raison sur ce point, si tu peux calculer à partir d'une requête SQL, tu ne dois pas répeter les valeurs ailleurs, car peut créé des erreurs d'intégrité de tes données (Pas le bon prix).
-
Soit,
il faut alors récuperer le prix et la quantitié dans le dataGridView :/
Je vais récupéré le code
Edit:
Voila:
using
System;using
System.Collections.Generic;using
System.ComponentModel;using
System.Data;using
System.Drawing;using
System.Text;using
System.Windows.Forms;using
ComponentFactory.Krypton.Toolkit;namespace
TheProject{
public partial class frmEditRecette : ComponentFactory.Krypton.Toolkit.KryptonForm{
private int _idRecette; public int IdRecette{
get { return _idRecette; } set { _idRecette = value; }}
private int _idProduct; public int IdProduct{
get { return _idProduct; } set { _idProduct = value; }}
private void dataBaseReload(){
dataBase mydatabase = new dataBase("localhost", "theproject", "root"); bool connectionStatus = mydatabase.SelectRecette("SELECT xdb_element.id, xdb_element.name, xdb_element.price, xdb_category.name category, xdb_recette.name recette, xdb_recettecomposant.qt FROM xdb_element INNER JOIN xdb_recettecomposant ON xdb_element.id = xdb_recettecomposant.element INNER JOIN xdb_recette ON xdb_recettecomposant.recette = xdb_recette.id INNER JOIN xdb_category ON xdb_element.category = xdb_category.id WHERE recette=" + _idRecette + ";");kryptonDataGridView1.DataSource = mydatabase.myDataTable;
//kryptonDataGridView1.Columns["id"].Visible = false;kryptonDataGridView1.Columns[
"name"].HeaderText = "Nom";kryptonDataGridView1.Columns[
"category"].HeaderText = "Catégorie";kryptonDataGridView1.Columns[
"qt"].HeaderText = "Quantité";kryptonDataGridView1.AutoGenerateColumns =
true;kryptonDataGridView1.Refresh();
DataTable table = (DataTable)kryptonDataGridView1.DataSource; double totalPrice = 0; foreach (DataRow row in table.Rows){
totalPrice +=
Double.Parse(row["price"].ToString());totalPrice +=
Double.Parse(row["qt"].ToString());}
toolStripStatusLabel1.Text =
"Prix total: " + totalPrice.ToString() + "CHF";}
public frmEditRecette(){
InitializeComponent();
}
private void toolStripButton1_Click(object sender, EventArgs e){
frmAddTheToRecette _frmAddTheToRecette = new frmAddTheToRecette();_frmAddTheToRecette.ShowDialog();
dataBaseReload();
}
private void toolStripButton2_Click(object sender, EventArgs e){
frmAddAromToRecette _frmAddAromToRecette = new frmAddAromToRecette();_frmAddAromToRecette.ShowDialog();
dataBaseReload();
}
private void toolStripButton3_Click(object sender, EventArgs e){
frmAddDecoToRecette _frmAddDecoToRecette = new frmAddDecoToRecette();_frmAddDecoToRecette.ShowDialog();
dataBaseReload();
}
private void frmEditRecette_Load(object sender, EventArgs e){
dataBaseReload();
}
private void toolStripButton4_Click(object sender, EventArgs e){
dataBase mydatabase = new dataBase("localhost", "theproject", "root"); bool insertArome = mydatabase.updateAll("DELETE FROM xdb_recetteComposant WHERE id=" + kryptonDataGridView1.CurrentRow.Cells["id"].Value.ToString() + ""); MessageBox.Show("Suppression des données effectuées avec succès", "suppression", MessageBoxButtons.OK, MessageBoxIcon.Information);dataBaseReload();
}
}
}
Comment et ou dire maintenant:
Si la valeur de la conne qt a changé {
update la database;
dataBaseReload();
}
?