WPF Datagrid不显示结果集

时间:2009-12-27 23:28:20

标签: c# wpf datagrid

我有一个列表,其中包含我的WPF Datagrid中显示的数据。我有以下代码在网格中搜索与文本框输入的字符串匹配。 代码位于按钮单击处理程序中。

var search = from s in dglist // dglist is my List<APerson>
                         where s.FirstName == textBox1.Text
                         select new
                             {
                                 Firstname = s.FirstName,
                                 Lastname = s.LastName
                             };
dataGrid1.ItemsSource = search; 

最后一行没有将搜索结果集放回到数据网格中,为什么?

3 个答案:

答案 0 :(得分:1)

Tony,Brian是正确的 - 只要您正确配置了列,您的原始代码就可以按照您的描述工作。网格将为您枚举查询,您不需要自己使用ToList()。我创建了一个测试项目并且它有效。您是否可能需要重新访问列的Binding属性?您是否离开网格以自动生成列?如果是这样,当您将项目分配给匿名对象时,网格将不知道要显示的内容。

尝试按如下方式配置列:

<wpftk:DataGrid.Columns>
   <wpftk:DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"  />
   <wpftk:DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}"/>
</wpftk:DataGrid.Columns>

此外,在投影中,您使用Firstname = s.FirstName。请注意名字中的小写n。这与网格的列绑定不匹配,并且不会更新任何内容。您无需在投影中指定其他名称。你可以干脆做 select new {s.FirstName, s.LastName} ...

最后,只是一个建议,我不会直接设置网格的ItemsSource。我会使用DataContext,因为您将来可能会在不同的控件中使用相同的数据。

答案 1 :(得分:1)

我无法提供解决方案,但只提供解决方法:如果您使用

dataGrid1.ItemsSource = search.ToList();

现在将评估LINQ查询,这将触发列表中的更新。

答案 2 :(得分:0)

LINQ查询返回IEnumerable结果集,而ToList返回List&lt;&gt; (当然)。与这些的不同之处在于可枚举,其中List能够通过索引引用,更改列表,并使用方法查找特定值。

我很惊讶原始查询不起作用,这就是为什么你仍然看到你提到的DataGrid中的加载...另外,要返回一个APerson可枚举集合,你需要将你的查询更改为: / p>

选择新的APerson {    ... }

这样最终的结果集就是你想要的类型。这可能是匿名类型的另一个问题???不确定那一个。看起来很奇怪......

抱歉,这可能没有用......

相关问题