2009-03-03 10 views
1

Dans notre application, nous avons des feuilles de style pour définir les couleurs communes etc ... J'ai écrit une fonction rapide et sale où j'obtiens un jeu de données d'une procédure stockée, élimine les colonnes que je ne veux pas show, cramez-le dans un DataGrid généré par programme, définissez les styles de DataGrid, puis exportez-le vers Excel. Tout le monde aime les couleurs dans la sortie Excel (Gasp! Ils correspondent aux couleurs DataGrid, bla bla bla ...). Ma dernière pièce que je voudrais ajouter est que je voudrais accéder par programmation à un style et saisir des codes de couleur et d'autres éléments (.IntranetGridHead) au lieu de les coder en dur, ce que je fais maintenant.

Accès aux styles par programme pour obtenir des valeurs

int iHeaderColor = Convert.ToInt32 ("D0D7E8", 16); 
DataGrid dg = new DataGrid(); 
dg.DataSource = dsReturnDataSet.Tables[0].DefaultView; 
dg.DataBind(); 

dg.HeaderStyle.BackColor = System.Drawing.Color.FromArgb(iHeaderColor); 
dg.HeaderStyle.Font.Bold = true; 
dg.HeaderStyle.Font.Size = 10; 

Il est donc évident lorsque la société passe par une autre « rebranding » et les valeurs de feuille de style changent, les couleurs Excel correspondront automatiquement et je vais obtenir un grand (tape dans le dos || cookies).

Des pensées des gens C# qui en savent plus que moi (qui serait la plupart d'entre vous ...)?
Merci,
Michael

Répondre

2

Tous les objets Web.UI.Control ont une propriété .Styles, accessible sous Styles ["Nom"]. Par conséquent, vous pouvez le faire:

DataTable dt = LookupStyles(); 
dg.Styles.Clear(); 
foreach (DataRow dr in dt.Rows) 
    dg.Styles.Add(dr["StyleName"].ToString(), dr["StyleValue"].ToString()); 

J'ai eu une pensée similaire il y a plusieurs mois :) Note pour que cela fonctionne bien, votre grille doit être runat = « server ».

Editer: On dirait que vous voulez lire la grille et l'utiliser ... Si vous utilisez un .CssStyle et une feuille de style (.css), vous devrez faire un HTTP GET à ce fichier css et l'analyser vous-même.

1

Vous devez analyser le fichier vous-même CSS et IIRC il n'y a aucun analyseur de fichier CSS dans le framework .NET de la boîte. Cependant, il y a un libre, vous pouvez trouver ici:

http://www.codeproject.com/KB/recipes/CSSParser.aspx

Vous devriez alors être en mesure d'utiliser pour analyser le fichier CSS. De là, vous devriez être en mesure d'obtenir le style et la valeur et l'appliquer à votre grille de données.

1

J'ai écrit quelque chose dans ce sens il y a quelque temps. Cela impliquait un HttpHandler pour traiter les fichiers CSS, une modification de la config IIS pour que asp.net reçoive les requêtes pour les fichiers CSS, et une structure de fichier xml simple qui contenait mes définitions de couleurs. Mais vous l'avez fait avec une base de données, ce qui est bien aussi.

Ensuite, dans le CSS j'avais quelque chose comme ça ...

.button 
{ 
    background-color: $colours:button-background-colour; 
    color: $colours:button-text-colour; 
} 

avec mon xml définissant les valeurs de bouton-background-color et le bouton-texte couleur. J'ai utilisé le remplacement de texte d'expression régulière pour traiter le fichier CSS en remplaçant dans les valeurs pertinentes du fichier xml. Je suis sûr que vous pourriez prendre certaines de ces idées et les combiner avec votre code existant pour obtenir l'effet désiré. Vous devrez bien entendu gérer la mise en cache et les modifications de votre fichier database/xml.

Espérons que ça aide.

Si vous avez besoin de pointeurs sur tout cela, je suis sûr que je peux trouver un exemple de code.

Questions connexes