[Debutant] Problème de class Datagridview.

dragonfly22000 Messages postés 49 Date d'inscription mardi 11 décembre 2018 Statut Membre Dernière intervention 13 avril 2021 - 29 avril 2019 à 22:07
Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 - 30 avril 2019 à 07:32
Bonjour, Voila Je galère pour faire une class datagridview.
Avant toute chose quand je mais toutes mes lignes de codes dans la main Form , tout fonctionne bien.
Mais j'aurais voulu faire une class pour diminuer le nombre de ligne dans la main Form.

J'ai donc essayer ceci:

using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using System.Xml;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;


namespace LightingTools
{

[Serializable]
public class Armoire:DataGridView


{

DataGridView BodyPwr = new DataGridView();

public void SetupDataGridView()

{

this.Controls.Add(BodyPwr);
BodyPwr.ColumnCount = 5;
BodyPwr.RowCount = 10;
BodyPwr.AutoSize = false;
DataGridViewColumn column1 = BodyPwr.Columns[0];
DataGridViewColumn column2 = BodyPwr.Columns[1];
DataGridViewColumn column3 = BodyPwr.Columns[2];
DataGridViewColumn column4 = BodyPwr.Columns[3];
DataGridViewColumn column5 = BodyPwr.Columns[4];
BodyPwr.ColumnHeadersHeight = 30;
column1.Width = 40;
column2.Width = 40;
column3.Width = 80;
column4.Width = 40;
column5.Width = 40;

DataGridViewRow row1 = BodyPwr.Rows[0];
DataGridViewRow row2 = BodyPwr.Rows[1];
DataGridViewRow row3 = BodyPwr.Rows[2];
DataGridViewRow row4 = BodyPwr.Rows[3];
DataGridViewRow row5 = BodyPwr.Rows[4];
DataGridViewRow row6 = BodyPwr.Rows[5];
DataGridViewRow row7 = BodyPwr.Rows[6];
DataGridViewRow row8 = BodyPwr.Rows[7];
DataGridViewRow row9 = BodyPwr.Rows[8];
DataGridViewRow row10 = BodyPwr.Rows[9];
row1.Height = 16;
row2.Height = 16;
row3.Height = 16;
row4.Height = 16;
row5.Height = 16;
row6.Height = 16;
row7.Height = 16;
row8.Height = 16;
row9.Height = 16;
row10.Height = 16;

BodyPwr.CellValueChanged += new DataGridViewCellEventHandler(Pwr_CellValueChanged);
//BodyPwr.MouseUp += new MouseEventHandler(control_MouseUp);
//BodyPwr.MouseMove += new MouseEventHandler(control_MouseMove);
//BodyPwr.MouseDown += new MouseEventHandler(control_MouseDown);
BodyPwr.CellBorderStyle = DataGridViewCellBorderStyle.Single;
BodyPwr.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.None;
Random rnd = new Random();
int randNumber = rnd.Next(1, 1000);
String GridName = "grd_" + randNumber;
BodyPwr.Name = GridName;
BodyPwr.BackgroundColor = Color.White;
BodyPwr.RowsDefaultCellStyle.BackColor = Color.White;
BodyPwr.AlternatingRowsDefaultCellStyle.BackColor = Color.White;
BodyPwr.ColumnHeadersDefaultCellStyle.ForeColor = Color.White;
BodyPwr.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("NativePrinterFontA", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
BodyPwr.EnableHeadersVisualStyles = false;
BodyPwr.RowHeadersVisible = false;
BodyPwr.AllowUserToAddRows = false;
BodyPwr.ScrollBars = ScrollBars.None;
BodyPwr.AllowUserToOrderColumns = false;
BodyPwr.AllowUserToResizeRows = false;
BodyPwr.Location = new Point(70, 30);
BodyPwr.Font = new System.Drawing.Font("NativePrinterFontA", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

for (int i = 0; i < 5; i++)
{
BodyPwr.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
}

}

public void CreateBodyPwr(String TypePlug)
{
DataGridViewColumn column3 = BodyPwr.Columns[2];
bool Mono;
Mono = false;
BodyPwr.Rows[0].Cells[2].Value = "ID:";
BodyPwr.Rows[1].Cells[2].Value = "Ph1:";

switch (TypePlug)
{
case "Pwl400":
column3.HeaderText = "PWL400A";
BodyPwr.ColumnHeadersDefaultCellStyle.BackColor = Color.Sienna;
break;

case "Pwl250":
column3.HeaderText = "PWL250A";
BodyPwr.ColumnHeadersDefaultCellStyle.BackColor = Color.Chocolate;
break;

case "125/5":
column3.HeaderText = "125Tetra";
BodyPwr.ColumnHeadersDefaultCellStyle.BackColor = Color.Red;
break;

case "63/5":
column3.HeaderText = "63Tetra";
BodyPwr.ColumnHeadersDefaultCellStyle.BackColor = Color.Lime;
break;

case "32/5":
column3.HeaderText = "32Tetra";
BodyPwr.ColumnHeadersDefaultCellStyle.BackColor = Color.Fuchsia;
break;

case "32/3":
column3.HeaderText = "32 Mono";
BodyPwr.ColumnHeadersDefaultCellStyle.BackColor = Color.MediumSlateBlue;
Mono = true;
break;
}
if (Mono)
{
BodyPwr.Rows[2].Cells[2].Value = "Pos:";
BodyPwr.Rows[3].Cells[2].Value = "Ref:";
BodyPwr.RowCount = 5;
}
else
{
BodyPwr.Rows[2].Cells[2].Value = "Ph2:";
BodyPwr.Rows[3].Cells[2].Value = "Ph3:";
BodyPwr.Rows[4].Cells[2].Value = "Pos:";
BodyPwr.Rows[5].Cells[2].Value = "Ref:";
}

}
public void RefreshColor()

{
int Ligne;
int Colonne;
BodyPwr.ColumnCount = 5;
BodyPwr.RowCount = 10;

for (Ligne = 0; Ligne <= 9; Ligne++)
{
for (Colonne = 1; Colonne <= 3; Colonne = Colonne + 2)
{
BodyPwr[Colonne, Ligne].Style.BackColor = Color.White;
switch (BodyPwr[Colonne, Ligne].Value)
{
case "Soca":
case "Hart":
BodyPwr[Colonne, Ligne].Style.BackColor = Color.Orange;
break;

case "125/5":
BodyPwr[Colonne, Ligne].Style.BackColor = Color.Red;
break;
case "63/5":
BodyPwr[Colonne, Ligne].Style.BackColor = Color.Lime;
break;
case "32/5":
BodyPwr[Colonne, Ligne].Style.BackColor = Color.Fuchsia;
break;

case "Ce16":
case "Pc16":
case "32/3":
BodyPwr[Colonne, Ligne].Style.BackColor = Color.MediumSlateBlue;
break;

case "Pwl":
BodyPwr[Colonne, Ligne].Style.BackColor = Color.Chocolate;
break;
}
}
}
}

public void Pwr_CellValueChanged(object sender, EventArgs e)
{
RefreshColor();
}

public void ResizeBodyPwrBorder()
{
DataGridViewElementStates states1 = DataGridViewElementStates.None;
var totalHeight1 = BodyPwr.Rows.GetRowsHeight(states1);
totalHeight1 += BodyPwr.Rows.Count;
BodyPwr.ClientSize = new Size(240, totalHeight1 - 3 + BodyPwr.ColumnHeadersHeight);
}


}

}<code csharp>



ET sur un bouton j'ai cette commande:

private void AddPwl250ABody_Click(object sender, EventArgs e)
{
Armoire test = new Armoire();
test.SetupDataGridView();
test.ResizeBodyPwrBorder();
test.CreateBodyPwr("Pwl250");
MakerPanel.Controls.Add(test);

}




Et donc le résultat est le suivant:


Il y a un datagriview "gris" qui ce construit Misère.

Ceci dit toute les méthodes qui sont dans ma classe Fonctionnent.
Merci par avance pour tout vos commentaires, et vos pistes de recherche.
Je précise encore je suis un gros débutant.
Tchuss.

2 réponses

Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 656
29 avril 2019 à 23:27
Bonjour

tout d'abord, tu as essayé d'utiliser la coloration syntaxique, mais ça n'a pas bien marché, pour la suite je t'invite à lire et appliquer ceci https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite
Mais j'aurais voulu faire une class pour diminuer le nombre de ligne dans la main Form.
C'est une mauvaise raison. Une classe décrit un objet qui a un travail à faire, que ce travail fasse 10 lignes ou 1000 n'a aucune importance. Ce qui compte pour bien concevoir un objet est de bien cerner quel est son champ d'action, ses propriétés, ses interactions avec les autres objets et surtout ses frontières.

Là, il me semble que tu as mélangé le code "métier" et l'interface, en plus tu mets un datagridview dans un datagridview, pourquoi pas, mais dériver l'un que tu mets dans l'autre, c'est un peu le chat qui se mord la queue.

Peux tu expliquer ton besoin (pas la solution que tu penses appliquer)?

0
dragonfly22000 Messages postés 49 Date d'inscription mardi 11 décembre 2018 Statut Membre Dernière intervention 13 avril 2021
30 avril 2019 à 00:00
Merci d'avoir pris le temps de me répondre.
Effectivement je mets une datagridview dans une datagridview,c'est mon problème.
Moi j’aimerais afficher simplement la datagridview issu de La class Armoire .SetupDatagridview.
En gros la datagridview grise j'en veut pas.
Mon Besoin dans un premier temps:
Fabriquer des Tableaux Serializable

Mon besoin dans un deuxieme Temps:
Pouvoir connecter ces tableaux avec des lines Conecteurs.

A la finalité faire des plans électrique.

Je rêve peut-être....
Je Sais pas, si j' ai le niveau et si je l'aurais un jour, mais j'essaye.
en tout cas merci pour ton aide.
0
Whismeril Messages postés 19040 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 9 mai 2024 656
30 avril 2019 à 07:32
Effectivement je mets une datagridview dans une datagridview,c'est mon problème.
C’est la première ligne active de ton code.....

this.Controls.Add(BodyPwr);
 
Moi qui suis déjà un datagridview j’en ajoute un à mes contrôles enfants.

Mais ton véritable problème ne vient pas de là, afficher des données serialisables ne veut pas dire dériver un contrôle.
Les données et leur affichages sont deux choses séparées.
Un film par exemple, c’est l’image des acteurs et du décor, mais ça n’est pas les acteurs et le décors, pour une séquence tournée par un amateur çà s’arrête là. Mais dans une superproduction, il y a des effets et du montage faits en post-production.

Dans un logiciel, c’est pareil, les données font leur travail et l’interface en montre une image avec éventuellement des effets et du montage.

Pour pouvoir t’aider, il faudrait que tu précises le terme Tableau, il a de nombreux sens dont au moins 3 pourraient être ce dont tu parles:
  • la variable tableau
  • un truc inspiré d’un tableur
  • un tableau électrique



0
Rejoignez-nous