Infragistics UltraDataSource在运行时从ICollection填充

时间:2015-03-26 20:39:19

标签: winforms infragistics ultragrid

Infragistics文档打败了我,

我想做的就是使用List

水合ultraDataSource

我目前正在使用onload来设置uDataSource1.Rows.SetCount(list.count) 并填写事件处理程序 private void uDataSource1_CellDataRequested(object sender,Infragistics.Win.UltraWinDataSource.CellDataRequestedEventArgs e)         {             FillGrid(发件人,E);         } 如何将此ultraDataSource绑定到列表对象,以便在单击按钮时我可以接受更改后的列表作为新的ultraDataSource水合器?很难找到正确的用法。

注意我需要表中的标题具有正确的标题和其他列属性(例如按需加载),这是ultraDataSource的核心优势。 任何提示都会有所帮助

2 个答案:

答案 0 :(得分:2)

要强制UltraDataSource触发ListChanged,您可以在按钮单击事件中调用SetCount方法的此重载:

public void SetCount( 
   int newCount,
   bool forceNotifyListReset
)

有关此方法的更多信息,您可以找到here

但是,只有事先设置了UltraDataSource波段的列,才能使用此功能。如果你的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);

答案 1 :(得分:1)

请注意,如果您希望网格按需加载数据,则只需使用UltraDataSource。

另一个更简单的选择是将网格直接绑定到List。网格可以绑定到任何实现IList或IBindingList的对象。