Acessando estilos programaticamente para obter valores
-
03-07-2019 - |
Pergunta
Em nossa aplicação temos folhas de estilo para definir cores comuns etc ... Eu escrevi uma função rápida e suja onde eu recebo um conjunto de dados a partir de um procedimento armazenado, cortará as colunas que eu não quero mostrar, cram-lo em um programaticamente gerado DataGrid, definir que os estilos de DataGrid, em seguida, exportá-lo para o Excel. Todo mundo adora as cores na saída Excel (surpresa! Eles combinam com as cores DataGrid, blá blá blá ...).
Minha última peça que eu gostaria de adicionar a ele é que eu gostaria de acessar programaticamente o estilo e cor grab códigos e outros itens a partir dele (.IntranetGridHead) em vez de codificar-los, que é o que eu estou fazendo agora.
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;
Obviamente, então sempre que a empresa passa por um outro “rebranding” e o estilo mudança valores patrimoniais, as cores Excel irá corresponder automaticamente e eu vou ter uma grande (tapinha nas costas || cookie).
Todos os pensamentos dos C # pessoas que sabem mais do que eu (o que seria a maioria de vocês ...)?
Obrigado,
Michael
Solução
objetos Todos Web.UI.Control tem uma propriedade .Styles, que pode ser acessado como Styles [ "name"]. Portanto, você pode fazer isso:
DataTable dt = LookupStyles();
dg.Styles.Clear();
foreach (DataRow dr in dt.Rows)
dg.Styles.Add(dr["StyleName"].ToString(), dr["StyleValue"].ToString());
Eu tinha um pensamento semelhante há vários meses :) Nota para esta para a direita trabalho, sua grade deve ser runat = "server".
Edit: Parece que você quer ler a grade e assim ... Se você estiver usando uma .CssStyle e uma folha de estilo (CSS), você vai ter que fazer um HTTP GET para o arquivo css e analisá-lo você mesmo.
Outras dicas
Você teria que analisar o arquivo CSS mesmo, e IIRC não há analisador de arquivo CSS no framework .NET para fora da caixa. No entanto, há um livre você pode encontrar aqui:
http://www.codeproject.com/KB/recipes/CSSParser.aspx
Você deve então ser capaz de usar isso para analisar o arquivo CSS. De lá, você deve ser capaz de obter o estilo e o valor e aplicá-lo à sua grade de dados.
Eu escrevi algo ao longo destas linhas uma volta enquanto. Tratava-se de um HttpHandler para lidar com os arquivos CSS, uma alteração no IIS de configuração para obter asp.net para receber as solicitações para os arquivos CSS e uma estrutura de arquivo xml simples que continha minhas definições de cor. Mas você já fez isso com um banco de dados, que é muito fina.
Em seguida, no CSS eu tinha algo como este ...
.button
{
background-color: $colours:button-background-colour;
color: $colours:button-text-colour;
}
com meu xml definição dos valores para o botão-background-color e botão-text-cor. Eu costumava substituição de texto expressão regular para processar o arquivo CSS substituindo os valores relevantes do arquivo xml.
Eu tenho certeza que você poderia tomar algumas dessas idéias e combiná-lo com o seu código existente para obter o efeito desejado. Você vai de necessidade curso para lidar com o cache e alterações ao seu arquivo de banco de dados / xml.
Espero que ajude.
Se você precisar de qualquer ponteiros sobre nada disso, então eu tenho certeza que posso cavar alguns códigos de exemplo.