Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1510 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] DataRow.ItemArray.SetValue petit soucis

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C#] DataRow.ItemArray.SetValue petit soucis

n°1004437
Slaine
None Shall Pass
Posté le 08-03-2005 à 09:53:42  profilanswer
 

Bonjour,
 
J'ai repris recemment le développement en .NET, plus particulièrement en CSharp, et à l'heure actuelle je suis bloqué sur une betise mais je ne m'en sort pas.
 
Voilà ce que j'essaie de faire :
 
J'ai une table de compétiteurs ayant comme champ le nom d'un Club, à côté de ça j'ai une table pour ces Clubs (nom, Ville).
Je trie mes compétiteurs selon certains critères pour obtenir un DataSet (et une DataTable), et je veux construire une autre DataTable basée sur la liste des Clubs, auquel je rajoute une colonne qui me servira de compteur pour connaitre le nombre de compétiteur par Club.
 
Jusqu'ici tout marche à peu près sauf que je n'arrives pas à incrémenter ce compteur qui reste à la valeur par défaut (0), en fait j'utilise la méthode SetValue mais ça ne semble pas marcher.
 
Voici le code :
 
 
//Ajout de la colonne Nombre de combattants par club
 
System.Data.DataColumn cNbrComp = new System.Data.DataColumn();
 
cNbrComp.ColumnName = "NbCompetiteur";
 
cNbrComp.DefaultValue = 0;
 
cNbrComp.DataType = System.Type.GetType("System.Int32" );
 
dsClubs.Tables["Clubs"].Columns.Add(cNbrComp);
 
 
// Définition de la clé primaire
 
System.Data.DataColumn[] cles = new System.Data.DataColumn[1];
 
cles[0] = dsClubs.Tables["Clubs"].Columns[0];
 
dsClubs.Tables["Clubs"].PrimaryKey = cles;
 
 
// Récupération du nombre de combattants par clubs
 
for (int i=0;i<monDS.Tables["Competiteur"].Rows.Count;i++)
 
{
 
System.Data.DataRow tempLigne = dsClubs.Tables["Clubs"].Rows.Find(monDS.Tables["Competiteur"].Rows[i].ItemArray[5]);
 
//System.Windows.Forms.MessageBox.Show(tempLigne.ItemArray[0].ToString() + " " + tempLigne.ItemArray[2].ToString() + " " + ((int) (tempLigne.ItemArray[2])).ToString());
 
tempLigne.ItemArray.SetValue( (int) (tempLigne.ItemArray.GetValue(2)) + 1, 2);
 
}
 
J'ai vérifié que la méthode Find me récupérait bien le bon Club, l'incrementation fonctionne bien, j'obtiens 1 (0 + 1), mais je n'arrives pas à mettre cette valeur dans le DataRow et je ne comprends pas pourquoi, ma colonne n'étant pas en ReadOnly.
 
Si quelqu'un a une idée, je l'en remercie d'avance.
 
Michael.


---------------
Membre de la Team HFr OFP -- New Zealand Trip
mood
Publicité
Posté le 08-03-2005 à 09:53:42  profilanswer
 

n°1004454
Slaine
None Shall Pass
Posté le 08-03-2005 à 10:04:52  profilanswer
 

Désolé d'avoir posté, je viens de trouver la solution et ça commençait sérieusement à m'enerver.
Et pouratant j'avais fait moult recherches avant de poster, mais finalement pas assez apparemment.
 
Pour ceux qui sont interessés voilà la solution, qui tiens plus du bidouillage qu'autre chose à mon avis.
 
Au lieu d'utiliser SetValue qui ne fonctionne pas apparemment, il faut directement référencer avec les indices ou noms de colonnes :
 
tempLigne.ItemArray.SetValue( (int) (tempLigne.ItemArray.GetValue(2)) + 1, 2);  
 
Deviens
 
tempLigne[2] = (int) (tempLigne.ItemArray.GetValue(2)) + 1;
 
J'avais essayé avec tempLigne.ItemArray[2] et ça marchait pas mieux que le SetValue.
Va comprendre Charles.
 
Encore une fois désolé pour ce faux Post, en espérant que ça aide quand même quelqu'un un de ces quatres.


---------------
Membre de la Team HFr OFP -- New Zealand Trip
n°1004516
FlorentG
Unité de Masse
Posté le 08-03-2005 à 10:36:23  profilanswer
 

Il est bizarre ton code :heink: J'me demande si tu te compliques pas la vie :)

n°1004641
Slaine
None Shall Pass
Posté le 08-03-2005 à 11:36:14  profilanswer
 

J'adores faire compliqué mais si tu as une solution plus simple je suis preneur.
 
Sachant que le but à la fin est d'avoir une liste de Judokas, répartis par poule, en essayant de ne pas avoir tous les Judokas d'un même club dans une même poule, et ce n'est pas chose facile.


---------------
Membre de la Team HFr OFP -- New Zealand Trip
n°1004647
FlorentG
Unité de Masse
Posté le 08-03-2005 à 11:39:13  profilanswer
 

En gros tu clone la table Clubs, et tu y rajoute une colonne avec le nombre de compétiteurs ?

n°1004684
Slaine
None Shall Pass
Posté le 08-03-2005 à 12:04:03  profilanswer
 

Oui ça me permet derrière de trier cette table pour avoir en premier les Clubs avec le plus de combattants et ainsi pouvoir répartir les Clubs les plus nombreux dans les différentes poules, en ayant au final maximum 2 combattants du même club dans une poule de 4.


---------------
Membre de la Team HFr OFP -- New Zealand Trip
n°1004700
FlorentG
Unité de Masse
Posté le 08-03-2005 à 12:14:28  profilanswer
 

Sinon tu définis une relation entre la table Club et la table Compétiteurs. Puis avec la méthode GetChildRows, tu récupère tous les compétiteurs pour un clubs. Et tu met la ligne à jour :)
 
Donc ça donnera un truc du genre (en VB.NET, mais ça change pas grand chose ;)) :
 

Code :
  1. For Each Row as DataRow in dsClubs.Tables("Clubs" )
  2.   Row("NbCompetiteur" ) = Row.GetChildRows("Clubs-Compétiteurs" ).Length
  3. Next


Et pis voilà :)

n°1004822
Slaine
None Shall Pass
Posté le 08-03-2005 à 14:30:03  profilanswer
 

Je n'ai pas mis de relations pour l'instant, même si c'est une erreur de ma part, le programme étant assez simple je ne voulais pas pousser trop loin les chose et compliquer.
 
Mais je retiens ton truc, merci pour les infos.


---------------
Membre de la Team HFr OFP -- New Zealand Trip

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] DataRow.ItemArray.SetValue petit soucis

 

Sujets relatifs
Un petit code php a modifié (5 lignes) lisez tous c'est intéressant :)[JSP] un petit probleme
Petit script utilisant DOM[Python] Petit programme de raycasting ( - de 3ko)
Besoin d'aide pour un petit script[resolu]petit pb de structures...
[C++/SQL./Oracle] Juste un petit problème de chaine...[PHP] Petit problème avec les checkbox
petit defi, réelle optimisation[C++] Ascii étendu, soucis...
Plus de sujets relatifs à : [C#] DataRow.ItemArray.SetValue petit soucis


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR