Kasus: grid project, ada foreign key ke contractor. Ada masalah ketika mau memfilter grid berdasarkan nama contractor.
Kode di view
[code language=”javascript”]
columns: [
{
field: "Id",
type: "number",
},
{
field: "Name",
template: "#= CreateUrl(Id, Name) # ",
title: "Nama Proyek",
},
{
field: "ContractorName",
title: "Kontraktor",
},
{
field: "LastWeeklyReport",
sortable: false,
filterable: false,
title: "Laporan Mingguan Terakhir",
},
{
field: "Status",
template: "#= FormatText(StatusImage) #",
filterable: false,
},
],
[/code]
Solusi mengubah filters sebelum diproses oleh GridHelper
[code language=”csharp”]
if (filters != null && (filters.Filters != null && filters.Filters.Count > 0))
{
this.MapFilters(ref filters);
GridHelper.ProcessFilters<project>(filters, ref list);
}
[/code]
[code language=”csharp”]
/**
* map atribut ViewModel ke atribut DataModel
*/
private void MapFilters(ref FilterInfo filters)
{
if (filters.Field == "ContractorName")
filters.Field = "contractor.name";
if (filters.Filters != null)
{
int i = 0;
while (i < filters.Filters.Count())
{
var innerFilter = filters.Filters[i];
MapFilters(ref innerFilter);
filters.Filters[i] = innerFilter;
++i;
}
}
}
[/code]