2010-12-01 10 views
6

DataGridViewに匿名型を返すLINQクエリを実装しました。DataGridVIewに匿名型が設定されています。どのようにフィルタリングするのですか?

質問:データソースが実際に匿名であるDataGridViewをフィルタリングする機会はありますか?

// Setting the datagridview data source 
rawDocumentsDataGridView.DataSource = rawTopics 
    .SelectMany(t => t.Documents) 
     .Select(d => new 
      { 
       DocumentId = d.Id, 
       Rilevante = d.IsRelevant, 
       TopicId = d.Topic.Id // foreign key 
      }).ToList(); 

// Make it not visibile, waiting for master change 
rawDocumentsDataGridView.Visible = false; 

// When master selection changed... 
void rawTopicsDataGridView_SelectionChanged(object sender, System.EventArgs e) 
{ 
    if (rawTopicsDataGridView.CurrentRow == null) return; 

    // Get selected topic id 
    int tid = (int) rawTopicsDataGridView.CurrentRow.Cells["TopicId"].Value; 

    // Filter rawDocumentsDataGridView based on topic id 
    // WARNING: PSEUDO CODE 
    var oldDataSource = (List<AnonymousType>)rawDocumentsDataGridView.DataSource; 
    rawDocumentsDataGridView.DataSource = oldDataSource 
     .Where(d => d.TopicId == tid); 
} 

答えて

7

あなたは、「データソース= DataSource.Where(...)」(言い換え)あなたが繰り返し内部のフィルタリングされたデータをフィルタリングしようとしていることをやり続ける場合は、しかし、この場合、私は希望:

:はい、私は、私間違っていたではない私たちの匿名型

class DocumentRow { 
    public int DocumentId {get;set;} 
    public bool Rilevante {get;set;} 
    public int TopicId {get;set;} 
} 
... 
List<DocumentRow> allData; 
... 
allData = rawTopics.SelectMany(t => t.Documents) 
    .Select(d => new DocumentRow 
     { 
      DocumentId = d.Id, 
      Rilevante = d.IsRelevant, 
      TopicId = d.Topic.Id // foreign key 
     }).ToList(); 
... 
rawDocumentsDataGridView.DataSource = allData 
    .Where(d => d.TopicId == tid).ToList(); 
+0

:B

、再利用のためのフィールドでリストを格納既にフィルタリングされたデータをフィルタリングしようとしていた。そのとおり。でも、匿名のやり方をどうにかして知りたいのですが...。 – gremo

+1

@Gremo - キャストバイトリックはありますが、それほど価値がありません。真剣に。ここでは匿名型は使用しないでください。データが同じコンテキストで生成され、消費されるときにのみ意味を持ちます(またはリフレクションのようなものでのみ*使用されます)。これはここでは当てはまりません。また、反射を介してフィルタリングを行うこともできますが、遅くて脆いです。 –

+0

いいえ、フィールドを公開します。私は反射についてあなたに同意します...それは価値がありません... – gremo

関連する問題