OVH Cloud OVH Cloud

Trier un DataTable

5 réponses
Avatar
TigrouMeow
Hello :)

J'ai une DataTable que j'aimerais trier... sans passer par un DataView car
ce qui m'interresse c'est que la DataTable elle est créer à partir d'un
fichier XML, et ensuite j'aimerais pouvoir recréer un fichier XML en
ordre...

Pour l'instant je fais ça :
DataRow[] rows = table.Select("", name + " ASC");

J'obtiens bien mes rows dans l'ordre ! Mais comment les appliquer à la table
à nouveau ?

J'ai essayé :
table.rows.Clear();
foreach (DataRow row in rows)
table.ImportRow(row);

Mais ça ne marche pas du tout, une fois le clear fait, les rows n'existent
plus non plus (enfin elles sont carrément vides). J'ai essayé de faire des
CopyTo, des Clones... toujours pareil, après de maudit Clear sur la table
mes rows qu'elles soient copiés ou pas sont effacés...

Je gère pas ! Merci de m'aider :)

5 réponses

Avatar
Ambassadeur Kosh
> J'ai une DataTable que j'aimerais trier... sans passer par un DataView car
ce qui m'interresse c'est que la DataTable elle est créer à partir d'un
fichier XML, et ensuite j'aimerais pouvoir recréer un fichier XML en
ordre...



dans ce cas, agi au niveau de ton WriterXml pour lui faire tolerer le
DataRow[].
non ?

J'obtiens bien mes rows dans l'ordre ! Mais comment les appliquer à la
table à nouveau ?



y'a gros mélange la. la table est pas faite pour ça.

J'ai essayé :
table.rows.Clear();
foreach (DataRow row in rows)
table.ImportRow(row);



ok, ben fait le dans une nouvelle DataTable, mais je pense que tu te goures
sur le principe du truc.


Mais ça ne marche pas du tout, une fois le clear fait, les rows n'existent
plus non plus (enfin elles sont carrément vides). J'ai essayé de faire des
CopyTo, des Clones... toujours pareil, après de maudit Clear sur la table
mes rows qu'elles soient copiés ou pas sont effacés...



ouaih, les lignes appartiennent au dataset.

Je gère pas ! Merci de m'aider :)



tu bosses en typé ou en non typé, paske de ça va dépendre ma réponse...
Avatar
TigrouMeow
"Ambassadeur Kosh" a écrit dans le message de
news:
J'ai une DataTable que j'aimerais trier... sans passer par un DataView
car ce qui m'interresse c'est que la DataTable elle est créer à partir
d'un fichier XML, et ensuite j'aimerais pouvoir recréer un fichier XML en
ordre...



dans ce cas, agi au niveau de ton WriterXml pour lui faire tolerer le
DataRow[].
non ?

J'obtiens bien mes rows dans l'ordre ! Mais comment les appliquer à la
table à nouveau ?



y'a gros mélange la. la table est pas faite pour ça.

J'ai essayé :
table.rows.Clear();
foreach (DataRow row in rows)
table.ImportRow(row);



ok, ben fait le dans une nouvelle DataTable, mais je pense que tu te
goures sur le principe du truc.


Mais ça ne marche pas du tout, une fois le clear fait, les rows
n'existent plus non plus (enfin elles sont carrément vides). J'ai essayé
de faire des CopyTo, des Clones... toujours pareil, après de maudit Clear
sur la table mes rows qu'elles soient copiés ou pas sont effacés...



ouaih, les lignes appartiennent au dataset.

Je gère pas ! Merci de m'aider :)



tu bosses en typé ou en non typé, paske de ça va dépendre ma réponse...



En typé ou en non typé ? C'est quoi ? Je connais pas :(
Le truc fou c'est que j'avais essayé de faire une seconde DataTable, d'y
copier les rows, pour effacer celles de la première ensuite et les recopier
dedans, et à chaque fois je rencontre le même problème, les rows
n'existent plus, j'arrive pas à les copier, c'est bête pourtant, j'aimerais
simplement les cloner, leur adresser un nouvel espace mémoire, faire un
malloc et un memcopy, grrr, mais en C# je sais pas du tout comment faire...

Sinon sur le XML directement, c'est pas vraiment la peine, car mon
application se sert juste du XML pour la sauvegarde et le chargement,
mais l'utilisé de l'application est tout autre et le XML n'est là que pour
le
format du fichier.

En fait, dans mon programme, on rentre des informations dans des champs
et ils vont se mettre dans des ListBox. Je propose une option pour les
classer, ce que je faisais avec une TableView, et ce qui marche très bien.
Mais dans la table, la position des items et la même, et c'est ça que je
voudrais changer :( Donc la TableView ne me sert à rien.

Merci de votre aide !
Avatar
Ambassadeur Kosh
> En typé ou en non typé ? C'est quoi ? Je connais pas :(



tu bosse sur un TigrouDataset (cree a partir de Add new element dans
Project ) ou un Dataset ?

Le truc fou c'est que j'avais essayé de faire une seconde DataTable, d'y
copier les rows, pour effacer celles de la première ensuite et les
recopier
dedans, et à chaque fois je rencontre le même problème, les rows
n'existent plus, j'arrive pas à les copier, c'est bête pourtant,
j'aimerais
simplement les cloner, leur adresser un nouvel espace mémoire, faire un
malloc et un memcopy, grrr, mais en C# je sais pas du tout comment
faire...



nan, tu Select, tu cree une datatable, et tu importe les row de ton
DataRow[].
maintenant, tu bazardes le 1°, et tu bosses sur le deuxieme, ou alors, tu
vides
le 1°, et tu importes le deuxieme dedans. ok ? mais bon, ça pue

Sinon sur le XML directement, c'est pas vraiment la peine, car mon
application se sert juste du XML pour la sauvegarde et le chargement,
mais l'utilisé de l'application est tout autre et le XML n'est là que pour
le format du fichier.



tu as un WriteXml(Dataset dataset). pourquoi pas une DataView à la place ?
si pas possible, pourquoi ne pas implanter avec Select et iterer sur les Row
?

En fait, dans mon programme, on rentre des informations dans des champs
et ils vont se mettre dans des ListBox. Je propose une option pour les
classer, ce que je faisais avec une TableView, et ce qui marche très bien.
Mais dans la table, la position des items et la même, et c'est ça que je
voudrais changer :( Donc la TableView ne me sert à rien.



ok, que va t'apporter le tri dans le dataset ? reflechi, il ne sert à ...
rien
Avatar
TigrouMeow
"Ambassadeur Kosh" a écrit dans le message de
news:
En typé ou en non typé ? C'est quoi ? Je connais pas :(



tu bosse sur un TigrouDataset (cree a partir de Add new element dans
Project ) ou un Dataset ?

Le truc fou c'est que j'avais essayé de faire une seconde DataTable, d'y
copier les rows, pour effacer celles de la première ensuite et les
recopier
dedans, et à chaque fois je rencontre le même problème, les rows
n'existent plus, j'arrive pas à les copier, c'est bête pourtant,
j'aimerais
simplement les cloner, leur adresser un nouvel espace mémoire, faire un
malloc et un memcopy, grrr, mais en C# je sais pas du tout comment
faire...



nan, tu Select, tu cree une datatable, et tu importe les row de ton
DataRow[].
maintenant, tu bazardes le 1°, et tu bosses sur le deuxieme, ou alors, tu
vides
le 1°, et tu importes le deuxieme dedans. ok ? mais bon, ça pue

Sinon sur le XML directement, c'est pas vraiment la peine, car mon
application se sert juste du XML pour la sauvegarde et le chargement,
mais l'utilisé de l'application est tout autre et le XML n'est là que
pour le format du fichier.



tu as un WriteXml(Dataset dataset). pourquoi pas une DataView à la place ?
si pas possible, pourquoi ne pas implanter avec Select et iterer sur les
Row ?

En fait, dans mon programme, on rentre des informations dans des champs
et ils vont se mettre dans des ListBox. Je propose une option pour les
classer, ce que je faisais avec une TableView, et ce qui marche très
bien.
Mais dans la table, la position des items et la même, et c'est ça que je
voudrais changer :( Donc la TableView ne me sert à rien.



ok, que va t'apporter le tri dans le dataset ? reflechi, il ne sert à ...
rien



Je suis d'accord avec toi, de créer une autre table temporairement c'est
vraiment pas beau du tout...

Le tri est important pour moi car c'est en fait une liste de vocabulaire,
et au niveau de l'affichage je propose le choix de classer par ordre
alphabétique une certaine colonne...

Ce que je pensais faire au début, c'est écrire dans le fichier xml une
section de configuration avec un classement à faire sur une certaine
colonne, comme ça qu'on on ouvre, il fait directement son tri.

Mais j'ai rencontré un problème ! Quand un tri est effectué sur
ma DataView, je n'arrive plus à accéder aux éléments ! Je m'explique.
Je fais un clic sur l'élément n°5 de ma DataView, il ne correspond plus
à l'élément n°5 de ma DataTable. Logiquement, d'après la MSDN
on peut y accéder en passant par DataView.Item et on obtient le
recordIndex correspondant dans la DataTable. Le truc ouf c'est que
je n'ai pas de "Item" dans la DataView... J'ai l'impression qu'il
manque des trucs à mon VS...

Tu en penses quoi ?
Avatar
Paul Bacelar
Ne pas faire confiance à Intellisense ;-).
--
Paul Bacelar

"TigrouMeow" wrote in message
news:diqmp0$re7$
"Ambassadeur Kosh" a écrit dans le message de
news:
>> En typé ou en non typé ? C'est quoi ? Je connais pas :(
>
> tu bosse sur un TigrouDataset (cree a partir de Add new element dans
> Project ) ou un Dataset ?
>
>> Le truc fou c'est que j'avais essayé de faire une seconde DataTable,


d'y
>> copier les rows, pour effacer celles de la première ensuite et les
>> recopier
>> dedans, et à chaque fois je rencontre le même problème, les rows
>> n'existent plus, j'arrive pas à les copier, c'est bête pourtant,
>> j'aimerais
>> simplement les cloner, leur adresser un nouvel espace mémoire, faire un
>> malloc et un memcopy, grrr, mais en C# je sais pas du tout comment
>> faire...
>
> nan, tu Select, tu cree une datatable, et tu importe les row de ton
> DataRow[].
> maintenant, tu bazardes le 1°, et tu bosses sur le deuxieme, ou alors,


tu
> vides
> le 1°, et tu importes le deuxieme dedans. ok ? mais bon, ça pue
>
>> Sinon sur le XML directement, c'est pas vraiment la peine, car mon
>> application se sert juste du XML pour la sauvegarde et le chargement,
>> mais l'utilisé de l'application est tout autre et le XML n'est là que
>> pour le format du fichier.
>
> tu as un WriteXml(Dataset dataset). pourquoi pas une DataView à la place


?
> si pas possible, pourquoi ne pas implanter avec Select et iterer sur les
> Row ?
>
>> En fait, dans mon programme, on rentre des informations dans des champs
>> et ils vont se mettre dans des ListBox. Je propose une option pour les
>> classer, ce que je faisais avec une TableView, et ce qui marche très
>> bien.
>> Mais dans la table, la position des items et la même, et c'est ça que


je
>> voudrais changer :( Donc la TableView ne me sert à rien.
>
> ok, que va t'apporter le tri dans le dataset ? reflechi, il ne sert à


...
> rien

Je suis d'accord avec toi, de créer une autre table temporairement c'est
vraiment pas beau du tout...

Le tri est important pour moi car c'est en fait une liste de vocabulaire,
et au niveau de l'affichage je propose le choix de classer par ordre
alphabétique une certaine colonne...

Ce que je pensais faire au début, c'est écrire dans le fichier xml une
section de configuration avec un classement à faire sur une certaine
colonne, comme ça qu'on on ouvre, il fait directement son tri.

Mais j'ai rencontré un problème ! Quand un tri est effectué sur
ma DataView, je n'arrive plus à accéder aux éléments ! Je m'explique.
Je fais un clic sur l'élément n°5 de ma DataView, il ne correspond plus
à l'élément n°5 de ma DataTable. Logiquement, d'après la MSDN
on peut y accéder en passant par DataView.Item et on obtient le
recordIndex correspondant dans la DataTable. Le truc ouf c'est que
je n'ai pas de "Item" dans la DataView... J'ai l'impression qu'il
manque des trucs à mon VS...

Tu en penses quoi ?