winforms - ticker and dataset datagrid view c# -



winforms - ticker and dataset datagrid view c# -

i modified code, m still in trouble, it's fine. except when modify info xml file, application crash. should refresh datagridview when modify info xml file.

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.xml.linq; using system.io; using system.threading; using system.reflection; namespace xml { public partial class form1 : form { dataset formbindingsource = null; public form1() { initializecomponent(); // formbindingsource = new dataset(); using (filestream stream1 = new filestream("c:\\sites.xml", filemode.open)) { formbindingsource.readxml(stream1); } this.updatedatagrid(); datagridview1.datasource = formbindingsource.tables[0]; // this.timer1.enabled = true; this.timer1.interval = 1000; this.timer1.tick += new system.eventhandler(this.timer1_tick); filesystemwatcher incoming = new filesystemwatcher(); incoming.path = @"c:\"; 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) { using (filestream stream1 = new filestream("c:\\sites.xml", filemode.open)) { formbindingsource.readxml(stream1); } this.updatedatagrid(); datagridview1.datasource = formbindingsource.tables[0]; } public void updatedatagrid() { if (this.invokerequired) { this.invoke((methodinvoker)delegate { updatedatagrid(); }); } else { //refresh column status evry sec int count = 0; foreach (datarow dr in formbindingsource.tables[0].rows) { datetime systemtime = convert.todatetime(datetime.now); datetime starttime = convert.todatetime(dr[0]); datetime endtime = convert.todatetime(dr[1]); if (starttime.timeofday.ticks <= systemtime.timeofday.ticks && systemtime.timeofday.ticks < endtime.timeofday.ticks) { formbindingsource.tables[0].rows[count][5] = "ok"; } else { formbindingsource.tables[0].rows[count][5] = "nok"; } count++; } formbindingsource.tables[0].defaultview.rowfilter = "date = #" + datetime.today + "#"; } } private void timer1_tick(object sender, eventargs e) { this.updatedatagrid(); this.label1.text = datetime.now.tostring("dddd, mmmm dd, yyyy hh:mm:ss tt"); } } }

it looks updating column every second. might more efficient create datatable property of form , update every sec (i.e. there should no need reset info source on grid...this might causing problem fires lot of events when that).

as per comment, looks need reload datatable when file scheme watcher event fires, , should time rebind grid.

in response comment code should below:

namespace xml { public partial class form1 : form { dataset formbindingsource = null; public form1() { initializecomponent(); this.timer1.enabled = true; this.timer1.interval = 1000; this.timer1.tick += new system.eventhandler(this.timer1_tick); filesystemwatcher incoming = new filesystemwatcher(); incoming.path = @"c:\"; 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) { formbindingsource = new dataset(); using(filestream stream1 = new filestream("c:\\sites.xml", filemode.open)) { ds.readxml(stream1); } this.updatedatagrid(); datagridview1.datasource = formbindingsource.tables[0]; } public void updatedatagrid() { if (this.invokerequired) { this.invoke((methodinvoker)delegate { updatedatagrid(); }); } else { //refresh column status evry sec int count = 0; foreach (datarow dr in formbindingsource.tables[0].rows) { datetime systemtime = convert.todatetime(datetime.now); datetime starttime = convert.todatetime(dr[0]); datetime endtime = convert.todatetime(dr[1]); if (starttime.timeofday.ticks <= systemtime.timeofday.ticks && systemtime.timeofday.ticks < endtime.timeofday.ticks) { ds.tables[0].rows[count][5] = "ok"; } else { ds.tables[0].rows[count][5] = "nok"; } count++; } formbindingsource.tables[0].defaultview.rowfilter = "date = #" + datetime.today + "#"; } } private void form1_load(object sender, eventargs e) { //load , bind file onchanged(null,null) } private void timer1_tick(object sender, eventargs e) { this.updatedatagrid(); this.label1.text = datetime.now.tostring("dddd, mmmm dd, yyyy hh:mm:ss tt"); } } }

notice how there form level dataset called formbindingsource. when update gird should update automatically without having reset datasource grid. need rebind when file changes , load new dataset.

(also, easier utilize using statement around filestream code have done)

c# winforms

Comments

Popular posts from this blog

How do I check if an insert was successful with MySQLdb in Python? -

delphi - blogger via idHTTP : error 400 bad request -

postgresql - ERROR: operator is not unique: unknown + unknown -