2009-10-29 8 views
1

J'écris sur une partie web pour sharepoint, donc je dois générer un Datagrid de manière problématique. La situation est que j'obtiens un Dataview, générez le Gris et liez les Données. Une colonne doit afficher une image. Je dois donc générer une colonne de modèle avec un modèle d'élément.Itemtemplate to view Image en Asp Datagrid (en code)

donc le code ressemble à ceci:

//Instantiate the DataGrid, and set the DataSource 
_grdResults = new DataGrid(); 
_grdResults.AutoGenerateColumns = false; 
_grdResults.DataSource = view; 
TemplateColumn colPic = new TemplateColumn(); 
colPic.HeaderText = "Image"; 

J'ai trouvé des dizaines d'exemple pour asp pour créer l'élément-modèle, mais comment construire un dans le code et se lient d'une manière ImageUrl à « imgURL » du Dataview ?

Merci pour tout conseil

Ren

Répondre

1

Vous devez créer une classe qui implémente cette interface ITemplate.

public class TemplateImplementation : ITemplate 
{ 
    public void InstantiateIn(Control container) 
    { 
     Image image = new Image(); 
     image.DataBinding += Image_DataBinding; 
     container.Controls.Add(image); 
    } 

    void Image_DataBinding(object sender, EventArgs e) 
    { 
     Image image = (Image)sender; 
     object dataItem = DataBinder.GetDataItem(image.NamingContainer); 
     // If the url is a property of the data item, you can use this syntax 
     //image.ImageUrl = (string)DataBinder.Eval(dataItem, "ThePropertyName"); 
     // If the url is the data item then you can use this syntax 
     image.ImageUrl = (string)dataItem; 
    } 
} 

Vous configurez votre ItemTemplate à une instance de cette classe.

colPic.ItemTemplate = new TemplateImplementation(); 
+0

Si vous devez effectuer plusieurs colonnes, vous souhaiterez probablement créer une classe GenericTemplate qui prend un délégué pour les méthodes InstantiateIn et DataBinding. –

+0

Parfait, juste à la seconde je l'ai trouvé par moi-même ;-) –