DataBindings sur la deuxième ligne d'un DataTable ? [RESOLU] - C++ - Programmation
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
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
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
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 ?
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.
Marsh Posté le 28-04-2006 à 14:42:07
Correctif : en C# ce n'est pas de -> mais des .
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 ?
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
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.
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.
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)...
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
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 çà.
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 !
Marsh Posté le 28-04-2006 à 17:26:11
Merci
A++
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
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
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
Marsh Posté le 05-05-2006 à 15:45:58
merci de clore ton sujet
pour cela, tu édites ton premier poste en mettant [résolu] en début de subject
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