Page tree
Skip to end of metadata
Go to start of metadata

在向应用程序添加了C1FlexGrid之后,像大多数的其他Grid产品一样,您可以通过ItemsSource属性填充该Grid。
ItemsSource属性需要传入一个实现了IEnumerable 接口的对象,但是在大多数情况下,您将使用更高层次的,实现了ICollectionView 接口的对象。ICollectoinView接口是Silverlight以及WPF主要的数据绑定接口(在WinForms平台下,该角色由IBindingList接口扮演)。
ICollectionView是一个丰富的接口。除了枚举数据项,它还同时提供了排序、过滤、分页、分组以及Currency管理的服务。
Silverlight提供了一个实现ICollectionView接口PagedCollectionView 类。PagedCollectionView的构造函数接受一个
IEnumerable对象作为参数,并自动提供所有的ICollectionView服务。WPF提供类似的类型,比方说
ListCollectionView。
例如,为了在一个C1FlexGrid Silverlight应用程序中显示一个客户对象的列表,请使用如下所示代码:

C#

List<Customer> list = GetCustomerList();
PagedCollectionView view = new PagedCollectionView(list); _flexGrid.ItemsSource = view;
您也可以直接将grid绑定到客户列表。但是绑定到一个ICollectionView通常是一个较好的主意,因为它为应用程序保留了大量的数据配置相关信息,这些信息可以跨控件共享。
如果多个控件绑定到同一个ICollectionView对象,则它们将展示同样的视图。在一个控件中选择一个项目会自动更新所有其他绑定控件中的选择。过滤,分组,或排序,也被所有的控件绑定到相同的视图中。
上面的代码会导致Grid扫描数据源,并为每一个数据源中的项的公共属性生成列。您可以通过代码自定义这些自动生成的列。或者您可以干脆禁用自动生成列的功能,通过代码或者XAML自己生成这些列。
例如,以下XAML禁用了自动列生成并手动通过XAML指定列:

C1FlexGrid XAML

<!-- create columns on a C1FlexGrid -->
<fg:C1FlexGrid x:Name="_flexiTunes"
AutoGenerateColumns="False" >
<fg:C1FlexGrid.Columns>
<fg:Column Binding="{Binding Name}" Header="Title"
AllowDragging="False" Width="300"/> <fg:Column Binding="{Binding Duration}"
HorizontalAlignment="Right" />
<fg:Column Binding="{Binding Size}"
HorizontalAlignment="Right" />
<fg:Column Binding="{Binding Rating}" Width="200"
HorizontalAlignment ="Center" />
</fg:C1FlexGrid.Columns> </fg:C1FlexGrid>
这和您在Microsoft DataGrid 或者最初的ComponentOne DataGrid控件中完成相同的任务所需要的XAML类似:

DataGrid XAML

<!-- create columns on an MSDataGrid (or C1DataGrid) -->
<ms:DataGrid Name="_msSongs"
AutoGenerateColumns="False" >
<ms:DataGrid.Columns>
<ms:DataGridTextColumn Binding="{Binding Name}" Header="Title"
CanUserReorder="False" Width="300" />
<ms:DataGridTextColumn Binding="{Binding Duration}" />
<ms:DataGridTextColumn Binding="{Binding Size}" />
<ms:DataGridTextColumn Binding="{Binding Rating}" Width="200" />
</ms:DataGrid.Columns>
</ms:DataGrid>
正如你所看到的,语法是几乎完全相同的。注意,您可以将此绑定做为访问Grid的列集合的索引。例如,如果您希望通过代码将"Rating"列的宽度变为300像素,则可以这样添加代码:

C#


_flexiTunes.Columns[

"Rating"].Width = new GridLength(300);
这是C1FlexGrid 用户最熟悉的语法。当您使用控件的WinForms版本时,这些命令也完全相同。


  • No labels