2012-03-13 2 views
3

この例では、コンピュータが自動列を生成しますが、他のマシンでは ソースがQueryableまたはEnumrableの場合、この例では、itemssourceがQueryableまたはEnumrableである場合、Datagridは列を生成しません

異なる

public MainWindow() 
    { 
     InitializeComponent(); 
     dg.DataContext = GetPaople(); 
    } 

    public object GetPaople() 
    { 
     List<Person> list = new List<Person>(); 
     for (int i = 0; i < 15; i++) 
     { 
      list.Add(new Person() { FirstName = "F" + i, LastName = "L" + i, Id = i }); 
     } 
     var res = from p in list select p; 
     return res.AsQueryable();//not Genrating Columns 
     return list;//Genrating Columns 
    } 
+1

列は、Personのプロパティに基づいて生成されます。 .AsQueryableメソッドは、IEnumarbleにします。IEnumarbleは、アクセスされていなければ結果を返しません。私は、DataGridが列挙をトリガーしないと思います。列を自動生成する唯一の方法は、コレクションを返すことです。 – Silvermind

+1

解決しようとしている機能的な問題は何ですか?リストは何を提供していないのですか? – Paparazzi

+1

@ Silvermindと@Blamに同意すると、LINQクエリは.Count()、.ToList()、.ToArray()などの拡張を使用して**アクセス**する必要があります。なぜあなたは 'List'をそのまま使うのですか?データグリッドのitemssourceを 'IQueryable'にして、式を使って素早くソート、フィルタリング、グループ化をしたいのですか? Thatsは良い提案ですが、悲しいことに、組み込みのWPFデータグリッドのためにMicrosoftによって実装されていません。私は興味深い議論のためにあなたの質問をupvotingです。 –

答えて

1

ことができるか私は、WPFのDataGridはのIQueryableコレクションをうまく果たしているとは思いません。 res.AsQueryable()の代わりにres.ToList()を試してください。

ToList()を使用すると、クエリの評価が強制され、結果がリストにダンプされます。この場合、厳密に型指定され、DataGridで列を生成するために検査できます。

関連する問題