我有一個DataGridView
和一個自定義列表。我將它綁定使用:在新行後更新datagridview
datagridview.DataSource = MyList;
的問題是,每當我從一個線程新行添加到列表中,它不會在DataGridView中顯示新行。有什麼方法可以簡單地覆蓋OnNewData
事件類型DoRefresh()
,並且可能不會丟失滾動位置?
SyncList的我使用的是:
public class SyncList<T> : System.ComponentModel.BindingList<T>
{
private System.ComponentModel.ISynchronizeInvoke _SyncObject;
private System.Action<System.ComponentModel.ListChangedEventArgs> _FireEventAction;
public SyncList()
: this(null)
{
}
public SyncList(System.ComponentModel.ISynchronizeInvoke syncObject)
{
_SyncObject = syncObject;
_FireEventAction = FireEvent;
}
protected override void OnListChanged(System.ComponentModel.ListChangedEventArgs args)
{
if (_SyncObject == null)
{
FireEvent(args);
}
else
{
_SyncObject.Invoke(_FireEventAction, new object[] { args });
}
}
據我所知,你的控制不會更新,只是因爲你更新'MyList'。如果您使用WinForms,[自定義對象列表視圖](http://objectlistview.sourceforge.net/cs/index.html)可能會有所幫助。 – gunr2171
我正在使用SyncList,因此數據正在更新'實時'。但我必須重新分配datagridview的列表才能顯示新行。 – user2320462