C#Winform中的动态自动更新(到UI、网格)绑定列表?
我甚至不确定我做的是否正确。但基本上我有一个由类/接口构建的对象列表。从那里,我将列表绑定到Windows窗体(C#)上的C#Winform中的动态自动更新(到UI、网格)绑定列表?,c#,data-binding,idynamicobject,C#,Data Binding,Idynamicobject,我甚至不确定我做的是否正确。但基本上我有一个由类/接口构建的对象列表。从那里,我将列表绑定到Windows窗体(C#)上的DataGridView 这里的列表是一个同步列表,它将自动更新UI,在本例中为DataGridView 现在一切正常,但现在我希望列表应该有一个动态对象,即默认情况下该对象将有两个静态属性(ID、名称),并且在运行时用户将选择其余属性。这些应该绑定到数据网格。列表上的任何更新都应自动反映在网格中 我知道,我们可以使用动态对象,但我想知道,如何找到解决方案 datagridv
DataGridView
这里的列表是一个同步列表,它将自动更新UI,在本例中为DataGridView
现在一切正常,但现在我希望列表应该有一个动态对象,即默认情况下该对象将有两个静态属性(ID、名称),并且在运行时用户将选择其余属性。这些应该绑定到数据网格。列表上的任何更新都应自动反映在网格中
我知道,我们可以使用动态对象,但我想知道,如何找到解决方案
datagridview.DataSource = myData; // myData is AutoUpdateList<IPersonInfo>
你能帮忙吗?我想对你来说最好的方法是“模拟”属性。我想最好的方法是实现,最好的例子是 我曾经遇到过类似的问题。就我的情况而言,我采取了一种方法。这可能对你有帮助
此外,还有一种方法(它与任何“动态”无关)可以使基类具有要使用的完整属性集。但是,如果在运行之前没有所有属性,那么它将不起作用。我想最好的方法是“模拟”属性。我想最好的方法是实现,最好的例子是 我曾经遇到过类似的问题。就我的情况而言,我采取了一种方法。这可能对你有帮助
此外,还有一种方法(它与任何“动态”无关)可以使基类具有要使用的完整属性集。但是,如果在运行时之前没有所有属性,它将无法工作。我可以通过动态属性添加/删除属性。唯一值得关注的是,这些应该在状态网格中自动更新。您可以使用ITypedList方式。在实现之后,您只需在向集合添加新元素时传递新属性名。我所说的收集是指MasterRecordCollection实例,如本文中的示例所示。我昨天确实查过了。您只需在每次创建新属性时更新DataGridView的数据源。我的意思是,在更新数据源后,新列将自动添加。我可以通过动态属性添加/删除属性。唯一值得关注的是,这些应该在状态网格中自动更新。您可以使用ITypedList方式。在实现之后,您只需在向集合添加新元素时传递新属性名。我所说的收集是指MasterRecordCollection实例,如本文中的示例所示。我昨天确实查过了。您只需在每次创建新属性时更新DataGridView的数据源即可。我的意思是,在更新数据源后,将自动添加新列
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);
}
}