[RESOLU] DataBindings sur la deuxième ligne d'un DataTable ?

DataBindings sur la deuxième ligne d'un DataTable ? [RESOLU] - C++ - Programmation

Marsh Posté le 28-04-2006 à 08:57:20    

Bonjour à tous,  
 
Je souhaite comprendre les mécanismes du DataBindings en utilisant une DataTable en MC++.  
 
Je sais comment créer la DataTable mais je souhaiterais associé la première ligne créée à un TextBox (ça marche chez moi) et la deuxième ligne (Row) à un autre TextBox(Ca je ne sais pas faire).
 
Quelqu'un sait-il comment faire ou connait-il un tuto qui explique se dont j'ai besoin?  
 
(Je précise que c'est bien du C++ .NEt = C++ Managé et non du C# ou autres ; et je n'arrive pas à utiliser les astuces de C# dans mon code)
 
Merci,
 
 
Gwen
 
 
Code utilisé :
 
 
// Création d'une DataTable 1 Colonne 2 lignes
 
 
DataTable* t = new DataTable("Control" );
 
// Ajout d'une colonne
t->Columns->Add(S"Colonne1" );
DataRow* r;
 
 
// Création d'une ligne
r = t->NewRow();
r->Item[0] = this->texbox1->Text;
t->Rows->Add(r);
 
// Création d'une Deuxième ligne
r = t->NewRow();
r->Item[0] = this->textbox2->Text;
t->Rows->Add(r);
 
// Bindage de la première ligne dans un TextBox(OK => Ca marche chez moi)
this->textbox3->DataBindings->Add(S"Text",t,S"Colonne1" );
/* modification du TextBox avec :
DataRow* var = t->Rows->get_Item(0);
var->Item[t->Columns->IndexOf(S"Text" )] = S"Modification graceà un bindage Ok";
Si vous avez mieux je suis preneur aussi
*/

 
// Bindage sur la deuxième linge dans un TextBox (Je ne sais pas faire)
this->textbox4->DataBindings->Add(S"Text",??????,S"Colonne1" )
//...


Message édité par gwenCPP le 05-05-2006 à 15:52:38

---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 28-04-2006 à 08:57:20   

Reply

Marsh Posté le 28-04-2006 à 11:50:04    

Sincèrement désolé d'insister mais j'ai besoin d'une réponse rapide, le délai d'obtention pour acheter un livre et avoir une éventuelle réponse est déjà trop long.
 
Y a-t-il quelqu'un dans le forum qui a déjà posé cette question?
Les personnes de ce forum ont-ils les compétences pour répondre à cette réponse.
 
Merci.
 
Gwen
 
 
 


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 28-04-2006 à 14:16:02    

gwenCPP a écrit :

Y a-t-il quelqu'un dans le forum qui a déjà posé cette question?


 
fonction recherche  [:spamafote]  


---------------
Töp of the plöp
Reply

Marsh Posté le 28-04-2006 à 14:22:41    

Merci,  
 
mais visiblement dans ce forum il n'y pas de question équivalente ; d'ailleur rare sont les forums où les gens posent cette question...
 
Le peu de forums qui posent cette question sont restés sans réponse (snif).
 
Ce que je sais je l'ai appris dans des tuto et sur msdn mais soit je ne suis pas suffisamment doué pour voir que ma réponse est dedans soit personne n'a jamais utilisé les DataTable, DataSet et compagnies en C++ .Net Managé ... (Mais j'en doute, sans être spécialiste je pense que c'est tout de même bateau comme question)...
 
En tout cas merci car c'est le seul forum ou j'ai au moins eu une réponse.
 
Gwen


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 28-04-2006 à 14:29:03    

Décris plus précisemment le "j'y arrive pas" : ça plante ? ça ne compile pas ? ca ne fais rien du tout ?


---------------
Töp of the plöp
Reply

Marsh Posté le 28-04-2006 à 14:41:38    

En fait je ne sais pas du tout le faire;
 
L'auivalent en C# est ;
 
this->TextBox->BindingContext["t"]->Position++; //pour passer à la ligne suivante
Sauf que IntelliSense [] n'est pas une expression valide et le . ou -> ne peut être appliqué à un BindingContext.
 
Ensuite, j'ai essayé de comprendre par moi même comment faire via Internet mais je n'ai rien trouvé en C++ Managé...
 
Conclusion après, la fonction recherche j'espère que quelqu'un peut m'aider et me dire comment faire.


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 28-04-2006 à 14:42:07    

Correctif : en C# ce n'est pas de -> mais des .


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 28-04-2006 à 16:04:16    

ici t'as un exemple d'utilisation:
http://fr.gotdotnet.com/quickstart [...] sData.aspx
 
ca t'aide ?


---------------
Töp of the plöp
Reply

Marsh Posté le 28-04-2006 à 16:05:00    

A propos, a voir l'aide dans msdn, BindingContext est une propriété de haut niveau, pas un bete tableau:
http://msdn.microsoft.com/library/ [...] ttopic.asp


---------------
Töp of the plöp
Reply

Marsh Posté le 28-04-2006 à 16:32:31    

this->TextBox4->BindingContext->Item[t, S"Text"];  
 
compile correctement mais this->TextBox4->BindingContext[t]->position me donne ceci (Le site gotdotnet fait un équivalent en C# de ça):
 
error C2107: illegal index, indirection not allowed
error C2227: left of '->Position' must point to class/struct/union
 
 
M'a aidé puisque c'est avec celui-ci que j'ai appris à faire le début du problème.
 
PS: effectivement, ce n'est pas un tableau simple, mais je pense que ça doit être un problème récurrent puisque plein de source C# utilise .Position comme dans le site que tu donnes.
 
En C++, je n'ai pas d'équivalent, Bref je nage dans le vide sans vraiment savoir ou aller.


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 28-04-2006 à 16:32:31   

Reply

Marsh Posté le 28-04-2006 à 16:49:18    

lis bien les exemples de msdn, ca t'aidera parce que là tu mélange c# et c++;
 
lis plus de doc sur le c++ aussi peut etre, sur sa syntaxe, etc.


Message édité par _darkalt3_ le 28-04-2006 à 16:54:39

---------------
Töp of the plöp
Reply

Marsh Posté le 28-04-2006 à 16:57:13    

error C2664: 'System::Windows::Forms::BindingManagerBase __gc *System::Windows::Forms::BindingContext::get_Item(System::Object __gc *)' : cannot convert parameter 1 from 'int' to 'System::Object __gc *'
 
Je pense qu'ici [t, S"Text"] permet de récupérer un DataColumn (élément d'un DataTable)...


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 28-04-2006 à 16:59:50    

C mon problème, je n'ai pas de doc C++ Managé et l'achat d'un livre met 3 plombes dans ma boite.
 
Sur le net il n'y a rien en C++ la dessus, mais merci de ton aide


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 28-04-2006 à 17:14:55    

et la msdn ?


---------------
Töp of the plöp
Reply

Marsh Posté le 28-04-2006 à 17:19:12    

Visiblement ils utilisent un BindingManagerBase class pour changé Position mais ce n'est pas compatible avec le BindingContext,
 
Sinon je trouve des choses utilsant ^ au lieu de * c'est du C++/CLI je crois ou quelque chose comme çà.


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 28-04-2006 à 17:24:27    

mmmh ça c'est du framework 2.0, dsl j'ai pas encore manipulé
 
bon courage !


---------------
Töp of the plöp
Reply

Marsh Posté le 28-04-2006 à 17:26:11    

Merci
 
A++


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 28-04-2006 à 17:28:10    

:jap:


---------------
Töp of the plöp
Reply

Marsh Posté le 05-05-2006 à 11:08:15    

J'ai résolu une partie de mon problème
 
La première erreur est ici :
 
this->textbox3->DataBindings->Add(S"Text",t,S"Colonne1" );  
 
mais : this->textbox3->DataBindings->Add(new Binding(S"Text",t,S"Colonne1" ));
NB : Attention au namespace de Binding System::Windows::Forms::
 
Il faut que ce soit un pointeur sinon on a quelques problèmes.
 
Ensuite pour changer la postion, il faut ceci :
 
1- Mettre la DataTable dans un DataSet
DataSet* dS = new DataSet(S"MaDataSet" );
dS->Table->Add(t); // Voir MSDN pour vérifier que c'est la bonne syntaxe
 
2- Récupérer le context (Valide pour tous les composants et la fenetre)
BindingManagerBase* bmb = this->BindingContext->get_Item(dS->Table->Item[S"Control"]); // Si intellisense ne permet pas d'accéder aux données et fonctions membre, ce n'est pas grave çà compile et fonctionne tout de même
 
3-Pour modifier la ligne de la table:
bmb->set_Position(int ligne=2);
 
Cela permet de naviguer dans les lignes de la DataTable.
 
Il me reste à trouver comment lier un TextBox à une ligne indépendament de la bmb->Position


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 05-05-2006 à 14:51:01    

J'ai également trouvé une solution pour différencier les positions de chaque TextBox
 
En fait, au démarrage de l'application, tous les composants ont le même BindingContext que la fenêtre parente.
 
Pour avoir un BindingContext spécifique au TextBox, il faut faire ceci avant de faire la liaison (DataBindings):
 
this->TextBox->BindingContext = new System::Windows::Forms::BindingContext();
this->TextBox->DataBindings->Add(new Binding(S"Text",this->MaDataSet,S"MaTable.MaColonne" ));
 
Ensuite on récupère le BindingManagerBase du TextBox pour modifier la position de la ligne en lecture (valable uniquement pour ce composant)
 
MonBMB = this->Identity4->BindingContext->get_Item(this->MaDataSet,S"MaTable" );
MonBMB->set_Position(2); // Exemple de numéro de ligne
 
avec Mon BMB qui est déclaré comme cela : System::Windows::Forms::BindingManagerBase* MonBMB;
 
 
Pour toutes informations supplémentaires :  
 
http://www.csharpfr.com/infomsg/WI [...] 20213.aspx
 
Le point que je vient de citer et le 4.18


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 05-05-2006 à 14:55:00    

Désolé pour cette question,
 
Dois je mettre le sujet comme résolu ou fermé dans ce forum?
si oui comment dois je faire,
 
merci
 
Gwen


---------------
Dans la vie le meilleur chemin n'est pas forcément le plus droit mais celui sur lequel on se sent le plus à l'aise
Reply

Marsh Posté le 05-05-2006 à 15:45:58    

merci de clore ton sujet :jap:
 
pour cela, tu édites ton premier poste en mettant [résolu] en début de subject

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed