Infragistics UltraDataSource 在运行时从 ICollection 填充
Infragistics UltraDataSource populate from ICollection at runtime
Infragistics 文档打败了我,
我想做的就是将 ultraDataSource 与列表结合起来
我目前正在使用 onload 设置 uDataSource1.Rows.SetCount(list.count)
并填写事件处理程序
private void uDataSource1_CellDataRequested(object 发件人,Infragistics.Win.UltraWinDataSource.CellDataRequestedEventArgs e)
{
FillGrid(发件人,e);
}
我如何将此 ultraDataSource 绑定到列表 object 以便在单击按钮时我可以接受更改的列表作为新的 ultraDataSource 水化器?很难找到正确的用法。
请注意,我需要 table 中的 headers 具有适当的标题和其他列属性(例如按需加载),这是 ultraDataSource 的核心优势。
任何提示都会有所帮助
要强制 UltraDataSource 触发 ListChanged,您可以在按钮单击事件中调用 SetCount 方法的重载:
public void SetCount(
int newCount,
bool forceNotifyListReset
)
有关此方法的更多信息,您可以找到 here
然而,这只有在您事先设置了 UltraDataSource 的 band 的列时才有效。如果您的 ICollection 每次都包含不同的对象,您需要一点反思来设置列,如下所示:
foreach (var property in typeof(MyClass).GetProperties().ToList())
{
this.ultraDataSource1.Band.Columns.Add(property.Name);
}
请记住,在这种情况下设置单元格值可能很棘手,并且需要在 CellDataRequested 事件处理程序中进行更多反射,如下所示:
var cellValue = ((List<MyClass>)data)[e.Row.Index];
e.Data = cellValue.GetType().GetProperty(e.Column.Key).GetValue(cellValue, null);
请注意,如果您希望网格加载数据,您只需要使用 UltraDataSource on-demand。
另一个更简单的选择是将网格直接绑定到列表。网格可以绑定到任何实现 IList 或 IBindingList 的对象。
Infragistics 文档打败了我,
我想做的就是将 ultraDataSource 与列表结合起来
我目前正在使用 onload 设置 uDataSource1.Rows.SetCount(list.count) 并填写事件处理程序 private void uDataSource1_CellDataRequested(object 发件人,Infragistics.Win.UltraWinDataSource.CellDataRequestedEventArgs e) { FillGrid(发件人,e); } 我如何将此 ultraDataSource 绑定到列表 object 以便在单击按钮时我可以接受更改的列表作为新的 ultraDataSource 水化器?很难找到正确的用法。
请注意,我需要 table 中的 headers 具有适当的标题和其他列属性(例如按需加载),这是 ultraDataSource 的核心优势。 任何提示都会有所帮助
要强制 UltraDataSource 触发 ListChanged,您可以在按钮单击事件中调用 SetCount 方法的重载:
public void SetCount(
int newCount,
bool forceNotifyListReset
)
有关此方法的更多信息,您可以找到 here
然而,这只有在您事先设置了 UltraDataSource 的 band 的列时才有效。如果您的 ICollection 每次都包含不同的对象,您需要一点反思来设置列,如下所示:
foreach (var property in typeof(MyClass).GetProperties().ToList())
{
this.ultraDataSource1.Band.Columns.Add(property.Name);
}
请记住,在这种情况下设置单元格值可能很棘手,并且需要在 CellDataRequested 事件处理程序中进行更多反射,如下所示:
var cellValue = ((List<MyClass>)data)[e.Row.Index];
e.Data = cellValue.GetType().GetProperty(e.Column.Key).GetValue(cellValue, null);
请注意,如果您希望网格加载数据,您只需要使用 UltraDataSource on-demand。
另一个更简单的选择是将网格直接绑定到列表。网格可以绑定到任何实现 IList 或 IBindingList 的对象。