Problème de suppression de lignes dans un datagrid

Résolu
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006 - 20 avril 2006 à 20:20
 BellaPeter - 12 juil. 2007 à 21:17
salut à tous
en fait je voudrais pouvoir supprimer des lignes dans un datagrid qui affiche que les déplacements du jour à partir d'un fichier XML le problème c'est que cza ne marche pas et lorsque je veux supprimer un enregistrement il est doublé.
voila le code du bouton:
CurrencyManager cm = (CurrencyManager)this.BindingContext[this.dataGrid1.DataSource];//this.dataGrid1.DataSource
int rowCount = cm.Count;
int pos = cm.Position;
if (cm.Position < cm.Count - 1)
{
cm.Position++;
}
ds.ReadXml("\\test.xml");
DataRow dr = ds1.Tables[0].Rows[pos];
int intLigne;
ds.Tables[0].DefaultView.Sort = "com";
intLigne = ds.Tables[0].DefaultView.Find(dr["com"]);
ds.Tables[0].Rows[intLigne].Delete();
ds.AcceptChanges();
ds1.Tables[0].Rows[pos].Delete();
ds1.AcceptChanges();
ds.WriteXml("\\test.xml");
//Form1_Load(sender, e);
j'espére trouver une réponse de votre part

51 réponses

Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
24 avril 2006 à 09:50
dataset.tables[0].defaultview.rowfilter="Date='" + Datetime.now.date.toshortdate() + "'";

plutot un truc du style...

par contre pas sur de la syntaxe il faudra que tu fasse des essais :)

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
3
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
21 avril 2006 à 09:06
pourquoi n'utilise tu pas le CM.delete (ou kkchose comme ca..) enfin la foinction du currencymanager qui permet de supprimer une ligne

pas de pb de ppositionnement ou autre le CM est tjs sur ta ligne active... ??

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006
21 avril 2006 à 09:34
j'ai fait cm.removeat(position) mais ca marche pas comme même
le problème c que j'ai dans le datagrid un dataset1 qui filtre le dataset0
si je supprime du dataset1 une ligne ca risque de ne pas avoir le m^me index que dans le dataset0 et ainsi je supprime une autre ligne du dataset0.
tu comprends mon problème ca paraît facile mais c'est vraiment difficile.
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
21 avril 2006 à 09:56
ok j'avais pas compris le pb...

alors dans tes dataset a tu une cle primaire unique ???

a savoir un champ unique pour chaque logne ??

si non => il suffit de creer dans tes dataset une colonne cle dans laquelle tu stock un compteur qui sera identique par ligne entre ton dataset 1 et 0

et pour trouver la ligne a suprrimer dans ton 2eme dataset tu parcours cette colonne a la recherche du compteur a supprimer...

archaique masi ca marche ^^

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
21 avril 2006 à 09:58
et si tu ne veux afficher que certaine ligne pkoi ne pas utiliser le dataset.defaultview.RowFilter = "MaColonne = '" + datetime.today + "'" ;

un truc du genre ??

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006
21 avril 2006 à 16:24
est ce que lorsqu'on fait un dataset row filter après lorsqu'on veut mettre ca dans le datagrid on fait datagrid.datasource=dataset et on n'a dans le datagrid les lignes qui sont filtrées.
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
24 avril 2006 à 08:43
yep :)

enfin elle sont visibles par contre les autres sont encore la...mais cachee :)

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006
24 avril 2006 à 09:38
mais par contre on peut pas faire de condition sur la colonne
je fais comme ca et ca marche pas
dataset.tables[0].defaultview.rowfilter="Date=Datetime.now.date";
en fait la colonne date est un string et avant je faisais un parse sur la colonne avant de lui affecter la date.
maintenant je peux pas faire un parse sur la colonne.
0
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006
24 avril 2006 à 11:33
Merci beaucoup
ca fait deux semaines que j'essaye de le faire on fait je les fait mais c'était pas très génial regardes le code bizzare que j'avais fait:
ds1.Tables.Add(ds.Tables[0].Clone());
foreach (DataRow dr in ds.Tables[0].Rows)
{
if ((DateTime.Parse((string)dr["Date"])) == DateTime.Now.Date)
{
DataRow r = ds1.Tables[0].NewRow();
for (int i = 0; i < dr.ItemArray.GetLength(0); i++)
r[i] = dr[i];
ds1.Tables[0].Rows.Add(r);
}
}
DataGridTableStyle tableStyle = new DataGridTableStyle();
DataTable dt = (DataTable)ds1.Tables[0];
tableStyle.MappingName = dt.TableName;
for (int j = 0; j < 4; ++j)
{
DataGridTextBoxColumn cs = new DataGridTextBoxColumn();
cs.MappingName = dt.Columns[j].ColumnName;
cs.HeaderText = dt.Columns[j].ColumnName;
tableStyle.GridColumnStyles.Add(cs);
}
dataGrid1.TableStyles.Clear();
dataGrid1.TableStyles.Add(tableStyle);

dataGrid1.DataSource = ds1.Tables[0];
ce qui me compliqué la tâche après pour supprimer les lignes convenablement
maintenant avec le defaultview je crois que c bon il me faut juste faire ce code je crois:
CurrencyManager cm = (CurrencyManager)this.BindingContext[this.dataGrid1.DataSource;
int rowCount = cm.Count;
int pos = cm.Position;
if (cm.Position < cm.Count - 1)
{
cm.Position++;
}
ds.Tables[0].Rows[pos].Delete();
ds.AcceptChanges();
ds.WriteXml("\\test.xml");
Form1_Load(sender, e);

je te remercie encore
pour le code de suppression je te laisse voir s'il ya mieux à faire je l'ai pas encore testé.
Merci encore
0
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006
24 avril 2006 à 11:51
tu sais j'ai testé le code que j'ai mis là haut mais au lieu de supprimer
la ligne il me l'ecris plusieurs fois ans le dataset.
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
24 avril 2006 à 12:02
le pb c'est que je ne comprend absolument pas pkoi tu utilise 2 dataset et pourquoi tu veux supprimer tel ou tel ligne

si ton but etait d'afficher uniquement les infos pour une journee le datarowfilter doit suffir

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006
24 avril 2006 à 14:10
oui mais je dois faire après deux boutons un supprimer et un modifier
qui permettent de supprimer et modfier des lignes affichées du jour.
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
24 avril 2006 à 14:33
regarde ce code

je l'ai mis a jour a midi peut etre cela pourra til t'aider pour la suppression

http://www.csharpfr.com/codes/EXEMPLE-UTILISATION-DATAGRID-DATAADAPTER-SELECT-SUR-BDD-AVEC_27738.aspx

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006
24 avril 2006 à 15:39
Merci beaucoup pour votre code dont je me suis inspiré
CurrencyManager CM = (CurrencyManager)BindingContext[ds.Table["Deplacements"]];
DataRowView CurrentView = (DataRowView)CM.Current;
CurrentView.Row.Delete();
dataGrid1.Refresh();
try
{
dataGrid1.Select(CM.Position);
}
Mais il me supprime dans le datagrid mais pas dans le fichier XML comment pourrai je valider mes suppression dans le fichier XML sans qu'il ta des redoublements des lignes.
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
24 avril 2006 à 15:47
il suffit de reecrir le fichier XML en question je pense..

dataset.writexml(nomdufichier);

voir en changeant le nomdufichier, des fois que le writexml fasse un append et double donc les lignes..

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006
24 avril 2006 à 15:59
en fait pour créer le fichier XML j'ai dû passer par deux étapes après remplissage d'un formulaire:
La 1ére fois je crée le fichier comme ça:
XmlTextWriter xtw;
try
{
xtw = new XmlTextWriter("\\test.xml", System.Text.Encoding.UTF8);
xtw.Formatting = Formatting.Indented;
xtw.Indentation = 4;
xtw.WriteStartDocument(true);
xtw.WriteStartElement("Deplacements");
xtw.WriteElementString("date", dateTimePicker1.Text);
xtw.WriteElementString("villed", textBox1.Text);
xtw.WriteElementString("villea", textBox2.Text);
xtw.WriteElementString("km", textBox3.Text);
xtw.WriteElementString("typed", comboBox1.Text);
xtw.WriteElementString("com", textBox5.Text);
xtw.WriteEndElement();
xtw.Flush();
xtw.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

et la 2éme étape quand je veux remplir le fichier xml je fais comme ca:

try
{
DataSet ds = new DataSet();
ds.ReadXml("\\test.xml");
// c'est plus simple comme ça .. enfin tu fais comme tu veux
DataRow row = ds.Tables[0].NewRow();
//Ajout des valeurs dans la table.
row["Date"] = dateTimePicker1.Text;
row["Villed"] = textBox1.Text;
row["villea"] = textBox2.Text;
row["km"] = textBox3.Text;
row["typed"] = comboBox1.Text;
row["com"] = textBox5.Text;
ds.Tables[0].Rows.Add(row);
ds.WriteXml("\\test.xml");
Form1 fm1 = new Form1();
fm1.Form1_Load(sender, e);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
{
}
}
je sais pas si c'est une bonne pratique mais je sais pas peut être parce que je viens de commencer en C# je pars sur de mauvaises pistes tjrs
j'attendrai avec impatience vos conseils pour la bonne méthode de création du fichier XML.
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
24 avril 2006 à 16:58
je ne vois pas l'ointeret de ta premiere partie a partir du moment ou ton ds.Tables[0] est bien parametrer...

en l'occurence si les colonne dans cette tables sont bien defini le writexml du dataset doit recopier la strucuture...avec les données...

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006
24 avril 2006 à 17:08
en fait la 1ére partie permet de créer le fichier XML dans l'émulateur du PDA
parce que je fais cette application pour un PDA et Ca me permet de déterminer
l'element deplacement et ainsi je pourrai mettre les données correspondants à chaque déplacement.
d'ailleurs je sais pas comment paramétrer le ds.tables[0].
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
24 avril 2006 à 17:25
ds.tables[0].columns.add(.......)

<hr>Arthenius
http://blogs.developpeur.org/Arthenius/

"Ce qui ne me tue pas, me rend plus fort..."
0
zikofs Messages postés 63 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 6 juillet 2006
24 avril 2006 à 17:39
oui je comprends mais le problème c'est que je peux pas créer
un fichier xml manuellement à l'intérieur du simulateur(d'ailleurs je sais pas ou il est dans mon PC lorsque je le crée) c'est pour ca que
je faisais l'étape 1 avant de passer à l'étape 2 pour remplir après le fichier.
0
Rejoignez-nous