teisipäev, 20. oktoober 2009

GridView tulba peitmine andmebaasi välja põhjal

Kui vaja teha mingi PIVOT päring andmebaasist või üldse juhtudel kus andmebaasist võib iga kord erinevate tulpade arvuga Tabular Data Stream (TDS) vastu tulla ning vaja seda ekraanil kuvada nii, et mõnda tulpa ei näitaks siis üks asja lahendus on GridView kasutamine AutoGenerateColumns="True" seadistusega.

Kuna GridView sisse saab teha igasugu tüüpi tulpasid siis põhimõte on see, et kontrollime, kas on teatud tüüpi tulp. Näiteks kontrollime, kas on BoundField tüüpi tulp ja kui on siis kas DataField langeb otsitavaga kokku.

///
/// tagastab GridView asp:BoundField tüüpi tulba indeksi DataField nime põhjal
///

///
/// fieldName on DataFieldi väli mida otsida
///
public int GetGridColumnIndex(GridView grd, string fieldName)
{
for (int i = 0; i < grd.Columns.Count; i++)
{
DataControlField field = grd.Columns[i];
//üritame pöörata BoundField-iks
BoundField bfield = field as BoundField;
//kui on BoundField ja DataField langeb ka kokku tagastame tulba indeksi
if (bfield != null && bfield.DataField.ToUpper() == fieldName.ToUpper())
{
return i;
}
}
return -1;
}


Tulba peitmine, PEIDATULP on see TDS tulp mida näidata ei taha

//leiame selle tulba numbri, mida ei tohi näidata
int tlnr = GetGridColumnIndex(this.GridViewKeeled, "PEIDATULP");
if (tlnr != -1)
{
this.GridViewKeeled.Columns[tlnr].Visible = false;
}