从空中自动生成列会导致Silverlight

时间:2010-10-11 14:22:01

标签: silverlight datagrid wcf-ria-services autogeneratecolumn

我正在做一些快速原型设计,并试图模拟一个网站的管理界面,并使用WCF RIA服务。我能够从服务器到客户端公开和使用域服务,但是当服务器上的查询结果没有数据时,我很难在数据网格中自动生成列。

 <riaControls:DomainDataSource Name="domainDataSource1" 
        LoadSize="20" QueryName="GetUsers" AutoLoad="True" >
            <riaControls:DomainDataSource.DomainContext>
                <ds:CobraDomainContext />
            </riaControls:DomainDataSource.DomainContext>
</riaControls:DomainDataSource>

<sdk:DataGrid ItemsSource="{Binding Data, ElementName=domainDataSource1}" AutoGenerateColumns="True" IsReadOnly="False" Width="250" Height="150" >
            </sdk:DataGrid>

这会呈现一个空的250x150数据网格(没有列/没有行)。我期待显示用户实体的colunms,即使没有从服务器返回任何数据,因为视图最初会有点糟糕。我的大脑似乎无法弄清楚出了什么问题,所以我将使用stackoverflow进行众包。

更新:我有点期望查询的结果是一个类型化的枚举,但看起来DomainDataService上的查询结果只是IEnumerable而不是类型,所以内部逻辑需要查看列表发现它包含的数据类型。

所以更新的问题是:我可以给DataGrid一个提示,告诉我们将返回什么类型的数据,或者自动生成网格中的列(通过XAML或代码)??

1 个答案:

答案 0 :(得分:0)

我猜你的ItemsSource枚举没有打字,对吧?如果它只是一个对象列表,则datagrid将找不到实体公共属性。

我不知道您的实体类是怎样的,但请尝试使用此代码来查看我在说什么:

某处:

public class User {
    public string Name { get; set; }
    public int Age { get; set; }
}

的Xaml:

 <my:DataGrid x:Name="datagrid"/>

代码隐藏:

public MainPage() {
    InitializeComponent();
    datagrid.ItemsSource = new List<User>();
}

列表为空,但datagrid将选择列名,因为我使用的是用户列表。它可以是用户枚举等。

我希望它有所帮助,

干杯

已编辑:关于更新的问题:您可以尝试使用转换器。