Ossia aggiungere una column Template via codice. Per far questo è necessario comprendere che cosa è effettivamete una template column.
Nulla di più nulla di meno che un contenitore il nocciolo di questo contenitore è l'interfaccia ITemplate che espone il metodo:
InstantiateIn che come paraemtro espone il control container.
Quest'esempietto mostra come realizzare una Colonna (con Header e Item ) contenente un immagine.
public class ImageColumnTemplate : ITemplate
{
#region Private
private DataControlRowType templateType;
private string _columnName;
private string _alternateText;
public ImageColumnTemplate(DataControlRowType type,
string columnName)
{
templateType = type;
_columnName = columnName;
_alternateText = " ";
}
public ImageColumnTemplate(DataControlRowType type,
string columnName, string altrenate)
{
templateType = type;
_columnName = columnName;
_alternateText = altrenate;
}
public void InstantiateIn(System.Web.UI.Control container)
{
switch (templateType)
{
case DataControlRowType.Header:
Literal lc = new Literal();
lc.Text = "<a href=\"#\">" + _columnName + "</a>";
container.Controls.Add(lc);
break;
case DataControlRowType.DataRow:
Image im = new Image();
im.DataBinding += new EventHandler(im_DataBinding);
container.Controls.Add(im);
im.AlternateText = _alternateText;
break;
default:
break;
}
}
public void im_DataBinding(object sender, EventArgs e)
{
Image l = (Image)sender;
GridViewRow row = (GridViewRow)l.NamingContainer;
if (DataBinder.Eval(
row.DataItem, _columnName).ToString().ToLower() == "true")
{
l.ImageUrl = "/Styles/commons/green.png";
}
else
{
l.ImageUrl = "/Styles/commons/red.png";
}
}
}
E questo è come aggiungere la colonna all grid view
TemplateField tcf = new TemplateField();
tcf.ItemTemplate = new ImageColumnTemplate(
DataControlRowType.DataRow,
NomeCampoBinding);
tcf.HeaderTemplate = new ImageColumnTemplate(
DataControlRowType.Header, "Stato");
gvwDataGrid.Columns.Add(tcf);
Nessun commento:
Posta un commento