DataGridVIew заполняется анонимным типом, как фильтровать?
Я заполнил DataGridView запросом LINQ, который возвращает анонимный тип.
вопрос: есть ли шанс отфильтровать 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);
}
1 ответов
Если вы продолжаете это делать (перефразируя) " DataSource = DataSource.Где.(..) "вы будете фильтровать внутри фильтрованные данные неоднократно; но в этом случае я бы:
a: сохраните список в поле для повторного использования,и
b: не нам анонимный тип
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();