Datagridview - refresh auto c# / winforms/XML

Signaler
Messages postés
8
Date d'inscription
samedi 26 juin 2010
Statut
Membre
Dernière intervention
14 mai 2019
-
Messages postés
8
Date d'inscription
samedi 26 juin 2010
Statut
Membre
Dernière intervention
14 mai 2019
-
Bonjour a tous le monde ,

J ai un soucis au niveau de mes threads.
le programme est :

je lis un fichier XML, je le charge dans un dataset / afficher par un datagridview.
je veux rafraichir mon dataset et le datagridview toutes les secondes car les data de mon fichier XML change aleatoirement.
( un utilisateur depuis une interface edite le fichier XML depuis un autre ordi).

le probleme est que j ai une erreur de "cross thread operation not valid : control". A mon avis c est a cause du Onchanged mais si je met un timer c est pareil.
J ai lu le tutoriel pour corriger sur ce site mais je n ai rien compris, si quelqu un peu m aider sur mon bout de code.
je vous en remercie d avance pour votre aide.

donc j ai cree ce prog:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Xml;
using System.Xml.Linq;
using System.IO;
using System.Threading;

namespace XML
{
public partial class Form1 : Form
{

private Thread t;

private DataSet ds = null;
private delegate void OnChangedDelegate(object source, FileSystemEventArgs e);

public Form1()
{

try
{
InitializeComponent();


DataSet ds = new DataSet();
ds.ReadXml("C:\\prog\\sites.xml");
dataGridView1.DataSource = ds.Tables[0];
}

catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}




this.dataGridView1.RowsDefaultCellStyle.BackColor = Color.Black;
this.dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Gray;
this.dataGridView1.GridColor = Color.Black;
//auto scroll vertical et horizontal
// this.dataGridView1.FirstDisplayedScrollingRowIndex = 3;

//changer l ordre des colonnes
this.dataGridView1.Columns["name"].DisplayIndex = 0;
this.dataGridView1.Columns["technical"].DisplayIndex = 1;
this.dataGridView1.Columns["url"].DisplayIndex = 2;
//suprimer la premiere colonne avec la fleche
this.dataGridView1.RowHeadersVisible = false;
this.dataGridView1.AutoResizeColumns();
this.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
this.dataGridView1.AutoResizeRows();
this.dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
this.dataGridView1.Font = new System.Drawing.Font("Microsoft Sans Serif", 40.0F, System.Drawing.FontStyle.Regular);





FileSystemWatcher incoming = new FileSystemWatcher();
incoming.Path = @"c:\prog";
incoming.NotifyFilter = NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.FileName;
incoming.Filter = "sites.xml";

incoming.Changed += new FileSystemEventHandler(OnChanged);
incoming.EnableRaisingEvents = true;

}




public void OnChanged(object source, FileSystemEventArgs e)
{
dataGridView1.DataSource = null;
ds.ReadXml("C:\\prog\\sites.xml");
dataGridView1.DataSource = ds.Tables[0];

}

}
}




TechRepublic
techrepublic.com.com


News
www.news.com


CNET
www.cnet.com


GameSpot
www.gamespot.com


hello
A


SDR
B


rrr
C


MEXICO
X01

1 réponse

Messages postés
8
Date d'inscription
samedi 26 juin 2010
Statut
Membre
Dernière intervention
14 mai 2019

le prog sert a afficher des informations sur un ecran. voila pourquoi je ne met pas de bouton pour rafraichir. car il n y as pas d'utilisateur sur l ordi.