private void Form2_Load(object sender, EventArgs e)
dataGridView2.DataSource = dtRate;
new Thread(new ThreadStart(this.addData)).Start();
}
void addData()
{
for (int i = 0; i < 1000; i++)
{
DataRow drRate = dtRate.NewRow();
drRate[0] = "A" + i.ToString();
drRate[1] = "B" + i.ToString();
drRate[2] = "C" + i.ToString();
drRate[3] = "D" + i.ToString();
dtRate.Rows.Add(drRate);
Thread.Sleep(100);
}
}
我想实现当DataTable的数据变化的时候DataGridView中的数据时时的变化,
我用Timer加一个DataGridView2.Refresh()是可以实现的,但是DataGridView2能看出来在闪动,而且
我的DataTable的变化频率是很快的,如果用Timer还是时间上有间隔误差的,DataGridView不能完全精确的反应出DataTable
的变化情况。
请高人支招,请公布最好是测试通过的方法。
dataGridView2.DataSource = dtRate;
new Thread(new ThreadStart(this.addData)).Start();
}
void addData()
{
for (int i = 0; i < 1000; i++)
{
DataRow drRate = dtRate.NewRow();
drRate[0] = "A" + i.ToString();
drRate[1] = "B" + i.ToString();
drRate[2] = "C" + i.ToString();
drRate[3] = "D" + i.ToString();
dtRate.Rows.Add(drRate);
Thread.Sleep(100);
}
}
我想实现当DataTable的数据变化的时候DataGridView中的数据时时的变化,
我用Timer加一个DataGridView2.Refresh()是可以实现的,但是DataGridView2能看出来在闪动,而且
我的DataTable的变化频率是很快的,如果用Timer还是时间上有间隔误差的,DataGridView不能完全精确的反应出DataTable
的变化情况。
请高人支招,请公布最好是测试通过的方法。
我是丛一个Socket取数据,
取数据用的是异步Socket,丛Socket源里面取出来的数据(不停的取,永远也不停),我想在DataGridView中时时显示,但是显示不出来,
但是如果我点击DataGridView的排序或者什么,那样就会显示出来。但是不变化。
我认为是线程的问题,
所以我加了一个timer,来时时的刷新DataGridView(DataGridView.reFresh())
但是又出现一个问题,DataGridView总是闪啊闪,而且Timer是有间隔的,
间隔太小,很准确,但是导致CPU升高,间隔太大,数据不准确。
请高人支招。
{
ds.Tables[0].Rows[0][1] = DateTime.Now.Millisecond.ToString();
}/
至于监控DataTable的变化,你可以用事件来监控,这样就能做到一有变法马上就能通知事件处理程序的目的
请贴出全部代码,
你更新数据是在Timer线程,
能否测试一个用
new Thread(new ThreadStart(this.addData)).Start();
这样的线程。
二一种就是时时的人为绑定刷新~~
我怀疑可能更这个有关。 DataRow dr = dtsymbol.NewRow();
dr[0] = quote.Symbol.ToString();
dr[1] = quote.Bid.ToString();
dr[2] = quote.Ask.ToString();
dr[3] = quote.FeedID.ToString(); dtsymbol.BeginLoadData();
dtsymbol.LoadDataRow(dr.ItemArray, LoadOption.OverwriteChanges);
dtsymbol.EndLoadData();
private void Form2_Load(object sender, EventArgs e)
{
dataGridView2.DataSource = dtRate;
} private void button1_Click(object sender, EventArgs e)
{
new Thread(new ThreadStart(this.addData)).Start();
} void addData()
{
for (int i = 0; i < 10; i++)
{
DataRow drRate = dtRate.NewRow();
drRate[0] = "A" + i.ToString();
drRate[1] = "B" + i.ToString();
drRate[2] = "C" + i.ToString();
drRate[3] = "D" + i.ToString();
dtRate.Rows.Add(drRate);
}
}
如果我把new Thread(new ThreadStart(this.addData)).Start();写到Form_load里面就没问题,
但是如果我放到一个button的Click事件里面就不行了。
请指教。
//定义一个监控数据变化的委托
public delegate void DataHasChanged(DataTable dt);
//定义一个数据监控类
public class MonitoringDataChangement
{
private DataTable dt;
public DataTable DT
{
set
{
//判断value是否与dt中的数据相同
//如果不相同则调用事件
dt = value;
DataChanging(dt);
}
get
{
//.........
return dt;
}
}
//数据监控的事件
public event DataHasChanged DataChanging;
}
private void Form2_Load(object sender, EventArgs e)
{
dataGridView2.DataSource = dtRate;
} private void button1_Click(object sender, EventArgs e)
{
new Thread(new ThreadStart(this.addData)).Start();
} void addData()
{
for (int i = 0; i < 10; i++)
{
DataRow drRate = dtRate.NewRow();
drRate[0] = "A" + i.ToString();
drRate[1] = "B" + i.ToString();
drRate[2] = "C" + i.ToString();
drRate[3] = "D" + i.ToString();
dtRate.Rows.Add(drRate);
}
}
private void Form2_Load(object sender, EventArgs e)
{
dataGridView2.DataSource = dtRate;
} private void button1_Click(object sender, EventArgs e)
{
new Thread(new ThreadStart(this.addData)).Start();
} void addData()
{
for (int i = 0; i < 10; i++)
{
DataRow drRate = dtRate.NewRow();
drRate[0] = "A" + i.ToString();
drRate[1] = "B" + i.ToString();
drRate[2] = "C" + i.ToString();
drRate[3] = "D" + i.ToString();
dtRate.Rows.Add(drRate);
}
}
为什么只有我点击DataGridView的排序,或者是拖动一下DataGridView的列宽,数据才显示出来,
但是如果我把开启线程的语句写到Form_load里面就可以显示,为什么写到Button_Click事件
里面就不显示那。
private void Form2_Load(object sender, EventArgs e)
{
dataGridView2.DataSource = dtRate;
} private void button1_Click(object sender, EventArgs e)
{
new Thread(new ThreadStart(this.addData)).Start();
} void addData()
{
for (int i = 0; i < 10; i++)
{
DataRow drRate = dtRate.NewRow();
drRate[0] = "A" + i.ToString();
drRate[1] = "B" + i.ToString();
drRate[2] = "C" + i.ToString();
drRate[3] = "D" + i.ToString();
dtRate.Rows.Add(drRate);
}
}
为什么只有我点击DataGridView的排序,或者是拖动一下DataGridView的列宽,数据才显示出来,
但是如果我把开启线程的语句写到Form_load里面就可以显示,为什么写到Button_Click事件
里面就不显示那。谁能解决上面的问题,分就是谁的。
private void Form2_Load(object sender,EventArgs e)
{
dataGridView2.DataSource = dtRate;
} private delegate void SetDvCallBack();
private void addData()
{
if (this.dataGridView2.InvokeRequired)
{
SetDvCallBack d = new SetDvCallBack(addData);
this.Invoke(d);
}
else
{
for (int i = 0; i < 10; i++)
{
DataRow drRate = dtRate.NewRow();
drRate[0] = 66 + i.ToString();
drRate[1] = 66 + i.ToString();
drRate[2] = 66 + i.ToString();
drRate[3] = 66 + i.ToString();
dtRate.Rows.Add(drRate);
}
}
}