這是我的問題: 我有一個DataGridView綁定到自定義對象的BindingList。後臺線程不斷更新這些對象的值。 udpates顯示正確,除了一件事以外,一切都很好 - 如果在更新後臺更新字段時嘗試編輯其他字段,則會丟失輸入的值。下面是展示此行爲的代碼示例: (新形式,刪除一個新的DataGridView上:)DatagridView丟失當前編輯後臺更新
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.Threading;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
private BindingList<foo> flist;
private Thread thrd;
private BindingSource b;
public Form1()
{
InitializeComponent();
flist = new BindingList<foo>
{
new foo(){a =1,b = 1, c=1},
new foo(){a =1,b = 1, c=1},
new foo(){a =1,b = 1, c=1},
new foo(){a =1,b = 1, c=1}
};
b = new BindingSource();
b.DataSource = flist;
dataGridView1.DataSource = b;
thrd = new Thread(new ThreadStart(updPRoc));
thrd.Start();
}
private void upd()
{
flist.ToList().ForEach(f=>f.c++);
}
private void updPRoc()
{
while (true)
{
this.BeginInvoke(new MethodInvoker(upd));
Thread.Sleep(1000);
}
}
}
public class foo:INotifyPropertyChanged
{
private int _c;
public int a { get; set; }
public int b { get; set; }
public int c
{
get {return _c;}
set
{
_c = value;
if (PropertyChanged!= null)
PropertyChanged(this,new PropertyChangedEventArgs("c"));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
}
所以,您可以編輯列a或b,你會看到C列的更新使你失去你的入場。
任何想法讚賞。
更新 - 我已經把那似乎工作解決方法。我刪除了對PropertyChanged的調用,而是在後臺更新代碼中調用DataridView.InvalidateColumn。 雖然不高興。 – user144133 2009-07-24 14:16:54