我甚至不確定我是否正確地做到了這一點。但基本上我有一個由類/接口構建的對象列表。從那裏,我將列表綁定到Windows窗體(C#)上的DataGridView
動態自動更新(到UI,網格)綁定列表在C#Winform?
這裏的列表是一個Sync列表,它將自動更新UI,在本例中爲DataGridView
。
現在每件事情都可以正常工作,但現在我想讓列表應該有一個動態對象,也就是對象默認具有兩個靜態屬性(ID,Name),並且在運行時用戶將選擇剩餘的屬性。這些應該綁定到數據網格。列表中的任何更新應自動反映在網格中。
我知道,我們可以使用動態對象,但我想知道,如何爲解決方案的方法,
datagridview.DataSource = myData; // myData is AutoUpdateList<IPersonInfo>
現在IPersonInfo
是對象的類型,需要爲它添加動態屬性在運行時鍵入。
public class AutoUpdateList<T> : BindingList<T>
{
private ISynchronizeInvoke _SyncObject;
private Action<ListChangedEventArgs> _FireEventAction;
public AutoUpdateList()
: this(null)
{
}
public AutoUpdateList(ISynchronizeInvoke syncObject)
{
_SyncObject = syncObject;
_FireEventAction = FireEvent;
}
protected override void OnListChanged(ListChangedEventArgs args)
{
try
{
if (_SyncObject == null)
{
FireEvent(args);
}
else
{
_SyncObject.Invoke(_FireEventAction, new object[] { args });
}
}
catch (Exception)
{
// TODO: Log Here
}
}
private void FireEvent(ListChangedEventArgs args)
{
base.OnListChanged(args);
}
}
你能幫忙嗎?
我可以通過動態屬性添加/刪除屬性。只關心這些應該在狀態網格中自動更新。 – Dhana
而你有ITypedList方式。實現之後,您需要的所有內容都是在將新元素添加到集合時傳遞新屬性名稱。作爲集合,我的意思是MasterRecordCollection instanse,如[this](http://www.sturmnet.org/blog/2005/02/04/simulating-fields)文章中的示例。我昨天做了檢查。您只需在每次創建新屬性時更新DataGridView的DataSource。 – heq
我的意思是在你更新數據源之後,新列將被自動添加 – heq