2010-12-09 15 views
2

J'ai fait quelques recherches mais rien n'est vraiment utile dans mon cas. Je souhaite hériter de DataControlField (System.Web.UI.WebControls) pour pouvoir gérer deux contrôles d'étiquette, puis je souhaite colorier les deux étiquettes pour obtenir une forme de mise en forme conditionnelle. partie de mise en forme mais comment puis-je personnaliser cette classe?Personnalisé DataControlField Classe

Où dans ma classe devrais-je définir les deux contrôles d'étiquette? Comment remplacer la méthode CreateField? P.: Je sais que je peux accomplir cela, en XHTML Markup, mais j'ai tellement de colonnes qu'il ne serait pas approprié d'inclure ces marquages ​​dans le balisage de la page. Par conséquent, je le fais dans la page CodeBehind.

EDIT:

public class MyField : DataControlField 
{ 
    public MyField() 
    { 

    } 

    protected override DataControlField CreateField() 
    { 
     // What to put here? 
    } 

    protected override void CopyProperties(DataControlField newField) 
    { 
     ((CalendarField)newField).DataField = this.DataField; 
     ((CalendarField)newField).DataFormatString = this.DataFormatString; 
     ((CalendarField)newField).ReadOnly = this.ReadOnly; 

     base.CopyProperties(newField); 
    } 

    public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex) 
    { 
     // Call the base method 
     base.InitializeCell(cell, cellType, rowState, rowIndex); 

     // Initialize the contents of the cell quitting if it is a header/footer 
     if (cellType == DataControlCellType.DataCell) 
      InitializeDataCell(cell, rowState); 
    } 

    protected virtual void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState) 
    { 

    } 
} 
+0

un peu de code ... – Saar

+0

@Saar J'ai inclus un code, mais ont besoin de savoir comment mettre en œuvre les méthodes de base de la bonne façon. –

Répondre

1

Voir ici. J'espère que cela vous aide.

public class MyField : DataControlField {  
    public MyField()  {  }  
    protected override DataControlField CreateField()  {   
     // What to put here?  

     return new MyField(); 
    }  
    protected override void CopyProperties(DataControlField newField)  {   
     ((CalendarField)newField).DataField = this.DataField;   
     ((CalendarField)newField).DataFormatString = this.DataFormatString;   
     ((CalendarField)newField).ReadOnly = this.ReadOnly;   
     base.CopyProperties(newField);  
    }  

    public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)  
    {   
     // Call the base method   
     base.InitializeCell(cell, cellType, rowState, rowIndex);   
     // Initialize the contents of the cell quitting if it is a header/footer   
     if (cellType == DataControlCellType.DataCell) 
     { 
      cell.DataBinding += new EventHandler(cell_DataBinding); 
     } 
    } 

    void cell_DataBinding(object sender, EventArgs e) 
    { 
     Control ctrl = sender as Control; 
     var container = ctrl.NamingContainer as IDataItemContainer; 

     // here what you would like to show in MyField 
    }  

} 
+0

J'en suis au point que je devrais retourner le nouveau MyField() 'avant que je lise votre réponse. Merci, je vais continuer à partir d'ici. –

+1

Bon parfois juste parler de notre problème aide. :) – Saar

+0

Comment puis-je obtenir les données du champ actuellement lié? Quelque chose comme chaîne MyText = (chaîne) DataItem [DataField] –