2010-09-10 8 views
0

J'ai ajouté un ITemplate au contrôle RadGrid de Telerik appelé SearchMenuTemplate ala:propriétés ITemplate pas disponible sous forme d'attributs

public class AbsRadGrid : RadGrid 
{ 

    private ITemplate _ItemTemplate; 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    [TemplateContainer(typeof(searchBar))] 
    public ITemplate SearchMenuTemplate 
    { 
     get { return _ItemTemplate; }// get 
     set { _ItemTemplate = value; }// set 
    } 
} 

Et la classe modèle ressemble à quelque chose comme (méthodes de remplacement obligatoires comme createchildcontrol ont été omis par souci de concision):

[ParseChildren(true)] 
class searchBar : CompositeControl, INamingContainer 
{ 
    public string rbStartsWithText { get; set; } 
} 

Maintenant, dans la fenêtre de contrôle de source, le contrôle RadGrid voit le modèle. Mais rbStartsWithText n'est pas un attribut sur le nœud.

Je veux voir quelque chose comme ceci (note: préfixe abs est enregistré dans le balisage):

<abs:AbsRadGrid ID="rg" runat="server"> 
    <SearchMenuTemplate rbStartsWithText="Starts With" /> 
</abs:AbsRadGrid> 

Au lieu de cela rbStartsWithText jette un vert gribouillis et me disant que ce n'est pas un attribut valide de SearchMenuTemplate.

Répondre

0

Votre propriété SearchMenuTemplate est d'un type ITemplate qui n'a pas de propriétés publiques, donc IntelliSense ne peut pas offrir d'attributs pour votre tag <SearchMenuTemplate>.

Pour pouvoir ajouter une propriété personnalisée vous devez implémenter l'interface ITemplate (méthode InstantiateIn) et y ajouter propriété souhaitée:

public class YourCustomTemplate : ITemplate 
{ 
    public string rbStartsWithText { get; set; } 

    public void InstantiateIn(Control container) 
    { 
     HtmlGenericControl div = new HtmlGenericControl("div"); 
     div.InnerText = rbStartsWithText; 
     container.Controls.Add(div); 
    } 
} 

alors vous pouvez l'utiliser votre grille personnalisée:

public class AbsRadGrid : RadGrid 
{ 
    [PersistenceMode(PersistenceMode.InnerProperty)] 
    public YourCustomTemplate SearchMenuTemplate { get; set; } 
} 

et enfin:

<abs:AbsRadGrid ID="rg" runat="server"> 
    <SearchMenuTemplate rbStartsWithText="Starts With" /> 
</abs:AbsRadGrid> 
+0

@downvoter, attention aux commentaires? – Alex

Questions connexes