Els grids són la part més difícil d'una aplicació web. Jo faig servir el papa de tots els grids: el Trirand jqGrid. De fet ja fa força anys que el faig servir (uis! hem faig vell!). Com aquí em tinc que limitar a tractar la part servidora que està en un ASHX, direm que l'objectiu és: donada una petició cal muntar el JSON corresponent per alimentar al grid.
Muntar aquest JSON té certa gràcia ja que ha de tenir una estructura concreta, per això cal fer unes classes que quan es converteixen a JSON encaixin amb el que necessita el grid. A més a més d'això cal cridar a mètode QUERY de la classe derivada de la clsDades corresponent. Per ja fer triple carambola, hi ha columnes d'un grid que estan compostes de varis camps de la BBDD ajuntats. Començarem doncs per les classes que s'han d'omplir per generar el JSON, són la clsGridResponse i la clsGridRow:
public class clsGridResponse
{
public string total;
public string page;
public string records;
public List<clsGridRow> rows = new List<clsGridRow>();
}
public class clsGridRow
{
public string id;
public StringCollection cell = new StringCollection();
}
Per descarregar una mica la complexitat de definir un grid amb columnes compostes de varis camps de la BBDD, vaig fer uns altres objectes on informar aquesta configuració, són les clsColumna i la clsCampBBDD.
public class clsColumna
{
public List<clsCampBBDD> Camps {get; set;}
public string Separador {get; set;}
public string Nom {get; set;}
public clsColumna()
{
Camps = new List<clsCampBBDD>();
Separador = "";
Nom = "";
}
}
public class clsCampBBDD
{
public string Nom { get; set; }
public string ValorSiNull { get; set; }
public string Format { get; set; }
public string Tipus { get; set; }
public clsCampBBDD()
{
Nom = "";
ValorSiNull = "";
Format = "";
Tipus = "";
}
}
I aquestes classes de suport on es poden posar? Doncs tota aplicació té un calaix de mals endreços on van a parar aquest tipus d'objectes. En el meu cas es diu clsHelper, i mereix un post apart. Aleshores, per fer un grid, el que cal fer es configurar aquestes classes i cridar al Loadgrid genèric de la clsHelper, un exemple d'aquesta configuració. |