Highlighting Map Areas
Para dar um efeito de brilho ao passar o mouse sobre Map Areas, você pode usar a biblioteca Mapper.js
A implementação é bem simples e com pouquissimo codigo já temos um exemplo funcional
http://www.netzgesta.de/mapper/
http://ajaxian.com/archives/mapperjs-10-highlighting-for-imagemaps
Um exemplo da utilidade é usar em conjunto com o Chart Controls, para destacar cada area do gráfico ao passarmos ou mouse sobre elas
[]s
Gráficos no ASP.NET com Microsoft Chart Controls
O uso de gráficos em aplicações web se tornou cada vez mais comum. Temos várias opções pagas no mercado, e desde o fim do ano passado a Microsoft disponibilizou seu recurso de representação gráfica para WindowsForms e WebForms, o Microsoft Chart Controls. A primeira e mais óbvia vantagem é o custo zero, o Chart Controls é de graça e pode ser baixado nos links abaixo :
Microsoft Chart Controls for Microsoft .NET Framework 3.5
http://www.microsoft.com/downloads/details.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&displaylang=en
Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008
http://www.microsoft.com/downloads/details.aspx?familyid=1D69CE13-E1E5-4315-825C-F14D33A303E9&displaylang=en
A outra vantagem que vejo é a simplicidade de uso, depois de instalado, basta arrastá-lo da Toolbox do Visual Studio e com poucas linhas de código já se tem resultado.
Vamos ver um simples exemplo, representando vendedores e o total de vendas de cada um deles.
Abra o Visual Studio 2008 ou o Visual Web Developer 2008 e crie um novo site.
Localize na Toolbox, aba Data, o controle Chart e arraste para seu arquivo default.aspx.

Chart Control na aba Data da Toolbox.
Não vou entrar em detalhes de layout, essa parte pode ser facilmente configurada nas propriedades do controle. Salvo isso, o codigo em seu aspx deve ficar similar a esse :
<asp:Chart ID="Chart1" runat="server"
BackColor="128, 128, 255"
BackGradientStyle="TopBottom"
BackImageWrapMode="Scaled"
BackSecondaryColor="192, 192, 255"
BorderlineColor="255, 192, 128"
Width="539px" >
<BorderSkin
BackGradientStyle="TopBottom"
BackImageTransparentColor="192, 255, 192"
SkinStyle="Raised" />
<series>
<asp:Series Name="Series1">
</asp:Series>
</series>
<chartareas>
<asp:ChartArea
BackColor="128, 128, 255"
BackGradientStyle="TopBottom"
Name="ChartArea1">
</asp:ChartArea>
</chartareas>
</asp:Chart>
No code-behind ( default.aspx.cs ), vamos codificar o evento Load para criar os dados e vincular ao nosso controle de gráfico.
protected void Page_Load(object sender, EventArgs e){
// Criando dois arrays, um com os nomes dos vendedores, e
// Outro com os valores das vendas
string[] Vendedores = { "João", "José", "Antônio", "Maria" };
double[] Totais = { 1000, 2300, 1220.33, 2222.40 };
// Adicionando Título
Chart1.Titles.Add("Relatório de Vendas");
// Setando tipo de Grafico ( Colunas Verticais )
Chart1.Series[0].ChartType = SeriesChartType.Column;
// Vinculando os arrays ao Controle para que ele gere o
// Gráfico
Chart1.Series[0].Points.DataBindXY(Vendedores, Totais);
// Mostrando os Gráficos com valores
Chart1.Series[0].IsValueShownAsLabel = true;
foreach (Series s in Chart1.Series)
{
for (int i = 0; i < s.Points.Count; i++)
{
// Mostra o valor como tooltip
s.Points[i].ToolTip = "#VAL{C}";
}
}
}
Compilando nossa aplicação e rodando devemos ter
o resultado da imagem abaixo :

No próximo Post de Chart Controls vamos falar sobre o efeito HighLight, a mudança de cor ao passar o mouse sobre áreas do nosso gráfico.
[]s
Mais exemplos :
Samples Environment for Microsoft Chart Controls
http://code.msdn.microsoft.com/mschart
Regular Expressions - Retirando Tags HTML de uma String
Como fazer para limpar as tags HTML da string abaixo de modo que só fiquemos com o texto ?
"<span><b>ASP.NET</b></span>"
Segue um exemplo usando Regular Expressions para retornar o Texto sem as tags HTML, no nosso caso, a palavra ASP.NET e jogar seu valor para a variável TextoPuro :
string Html = "<span><b>ASP.NET</b></span>";
string TextoPuro = Regex.Replace( Html, @"<(.|\n)*?>", string.Empty );
A Classe Regex faz parte do namespace System.Text.RegularExpressions
Aguardem os próximos Posts de Regular Expressions
[]s
Regular Expression Library
http://regexlib.com/
Implementando Log de Acessos usando Herança com ASP.NET e C#
Além do site estar bonito e funcional, é muito importante que saibamos o quanto ele está sendo acessado.
O intuito desse Post é mostrar como fazer um log de acessos bem simples, e de forma bem rápida, usando Herança.
1° Passo : Criar a tabela que gravará os dados de acesso
Vamos chamá-la de LOG_ACESSOS e armazenar a DATA e alguns campos retornados pela coleção Request.ServerVariables.
A coleção ServerVariables contém informações do cliente e do servidor. Estas variáveis são criadas quando uma nova página é requisitada.
O uso das ServerVariables é bem útil caso necessitemos de informações do servidor ou do navegador do cliente.
E são esses dados que iremos gravar em nosso Log.
As variáveis da coleção você confere na lista abaixo :
ALL_HTTP - Lista informações tais como: host origem, página de origem, caracteristicas do navegador cliente, entre outras.
ALL_RAW - Retorna todas as informações enviadas por cabeçalho HTTP da página em seu estado original.
APPL_MD_PATH - Devolve o caminho lógico da página (path do metabase).
APPL_PHYSICAL_PATH - Caminho físico do arquivo no disco.
AUTH_TYPE - Método de autenticação utilizado pelo servidor para validar usuários que solicitam um script.
AUTH_USER - Nome de usuário fornecido ao servidor em caso de não permitir acesso anônimo ao diretório.
AUTH_PASSWORD - Senha referente ao usuário logado.
CERT_COOKIE - ID do certificado digital do cliente.
CERT_FLAGS - Valor de dois bits: bit 0 igual a 1 indica se o certificado do cliente está presente, bit 1 igual a 1,
indica que a autoridade de certificação do certificado do cliente é inválida.
CERT_ISSUER - Campo Issuer do certificado do cliente (O=MS, OU=IAS, CN=usuário, C=USA).
CERT_KEYSIZE - Número de bits na chave de conexão SSL.
CERT_SECRETKEYSIZE - Número de bits na chave do "Server certificate private"
CERT_SERIALNUMBER - Campo Serial Number do certificado digital do cliente.
CERT_SERVER_ISSUER - Campo Issuer do certificado do servidor.
CERT_SERVER_SUBJECT - Campo Subject do certificado SSL do servidor.
CERT_SUBJECT - Campo Subject do certificado do cliente.
CONTENT_LENGTH - Tamanho em bytes, do conteúdo de uma requisição request ao servidor.
CONTENT_TYPE - Tipo de requisição enviada ao servidor pelo cliente.
GATEWAY_INTERFACE - Tipo de interface CGI usada no servidor web para manipular a solicitação (request).
HTTP_NOMEHEADER - Valor armazenado no header especificado. Podemos destacar os mais comuns: HTTP_ACCEPT, HTTP_ACCEPT_ENCODING
HTTPS - Retorna à uma solicitação request, dizendo se o canal é seguro (ON) ou não seguro (OFF).
HTTPS_KEYSIZE - Número de bits na chave de conexão Secure Sockets Layer - SSL.
HTTPS_SECRETKEYSIZE - Número de bits na chaver do "server certificate private".
HTTPS_SERVER_ISSUER - Campo Issuer do certificado do servidor.
HTTPS_SERVER_SUBJECT - Campo subject do certificado do servidor.
INSTANCE_ID - ID, em formato texto, para a instância do Internet Information Server (IIS).
INSTANCE_META_PATH - Path do metabase para a instância do Internet Information Server (IIS) que responde à solicitação (request).
LOCAL_ADDR - Retorna o endereço lógico do servidor onde foi feito a requisição
LOGON_USER - Conta do usuário usada para efetuar o logon no Windows.
PATH_INFO - Caminho virtual do arquivo que realizou a requisição, apartir da raiz do servidor.
PATH_TRANSLATED - Versão da variável "PATH_INFO" transformado em path físico.
QUERY_STRING - Retorna as variáveis passadas por cabeçalho HTTP à uma página via QueryString.
REMOTE_ADDR - Retorna endereço IP da máquina cliente que requisitou algo ao servidor.
REMOTE_HOST - Nome do host que requisitou algo ao servidor.
REMOTE_USER - Nome da máquina que solicitou o arquivo asp ao servidor. Disponível somente se disponível.
REQUEST_METHOD - Método usado pela requisição ao servidor (GET ou POST)
SCRIPT_NAME - Path virtual do arquivo requisitado ao servidor.
SERVER_NAME - Nome do servidor onde foi realizada a requisição (pode ser retornado o endereço IP, DNS alias ou nome do host).
SERVER_PORT - Retorna o número da porta onde foi realizada a requisição ao servidor.
SERVER_PORT_SECURE - Diz se a porta onde é recebida as solicitações pelo servidor é segura (1) ou não segura (0).
SERVER_PROTOCOL - Retorna nome e versão respectivamente do protocolo usado pelo servidor WEB para interpretar a solicitação
Para fins didáticos, vamos escolher apenas algumas dessas variáveis em nossa tabela e além disso armazenar um ID como chave e a DATA da inserção
dos dados
CREATE TABLE DBO.LOG_ACESSOS
(
ID INT IDENTITY(1,1) NOT NULL,
DATA DATETIME NOT NULL,
QUERY_STRING VARCHAR(MAX) NULL,
REMOTE_ADDR VARCHAR(MAX) NULL,
REMOTE_HOST VARCHAR(MAX) NULL,
LOGON_USER VARCHAR(MAX) NULL
)
GO
ALTER TABLE DBO.LOG_ACESSOS ADD CONSTRAINT [PK_LOG_ACESSOS] PRIMARY KEY (ID)
GO
Com nossa tabela criada, faremos uma procedure de INSERT.
CREATE PROCEDURE DBO.INSERT_LOG_ACESSOS
(
@QUERY_STRING VARCHAR(MAX) = NULL,
@REMOTE_ADDR VARCHAR(MAX) = NULL,
@REMOTE_HOST VARCHAR(MAX) = NULL,
@LOGON_USER VARCHAR(MAX) = NULL
)
AS
BEGIN
INSERT INTO DBO.LOG_ACESSOS
(
DATA ,
QUERY_STRING ,
REMOTE_ADDR ,
REMOTE_HOST ,
LOGON_USER
)
VALUES
(
GETDATE() ,
@QUERY_STRING ,
@REMOTE_ADDR ,
@REMOTE_HOST ,
@LOGON_USER
)
END
2º Passo : Criar uma classe LogAcessos com um método que executa nossa procedure de INSERT.
public class LogAcessos
{
// Pega String de Conexão do Web.Config
private readonly string ConnectionString
= System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
// Construtor Padrão
public LogAcessos()
{ }
// Metodo que Grava os Acessos
public void GravaAcesso()
{
using (SqlConnection conexao = new SqlConnection(this.ConnectionString))
{
SqlCommand comando = new SqlCommand();
comando.Connection = conexao;
comando.CommandType = System.Data.CommandType.StoredProcedure;
comando.CommandText = "INSERT_LOG_ACESSOS";
comando.Parameters.AddWithValue("@QUERY_STRING",
HttpContext.Current.Request.ServerVariables["QUERY_STRING"].ToString() );
comando.Parameters.AddWithValue("@REMOTE_ADDR",
HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString() );
comando.Parameters.AddWithValue("@REMOTE_HOST",
HttpContext.Current.Request.ServerVariables["REMOTE_HOST"].ToString() );
comando.Parameters.AddWithValue("@LOGON_USER",
HttpContext.Current.Request.ServerVariables["LOGON_USER"].ToString() );
try {
conexao.Open();
int i = comando.ExecuteNonQuery();
comando.Dispose();
}
catch (SqlException sql)
{
// trata Exception SQL
}
catch (Exception ex)
{
// trata Exception Genérica
}
finally {
if (conexao.State == System.Data.ConnectionState.Open)
{
conexao.Close();
}
}
}
}
}
3º Passo : Criar classe herdando de System.UI.Page, sobrescrever o OnLoad,
instanciar nossa classe LogAcessos e executar o método GravaAcesso()
public class BaseForm : System.Web.UI.Page
{
protected override void OnLoad(EventArgs e)
{
LogAcessos log = new LogAcessos();
log.GravaAcesso();
log = null;
base.OnLoad(e);
}
}
4º Passo : Ao criar as páginas, fazer com que herdem da nossa classe BaseForm
public partial class _Default : BaseForm
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
Dessa forma, sempre que suas páginas carregarem, elas executarão o método
GravaAcesso, gravando na nossa tabela LOG_ACESSOS os dados que definimos
Espero que seja útil
[]s
Classe SqlConnection
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.aspx
Classe SqlCommand
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.aspx
Request.ServerVariables Collection
http://msdn.microsoft.com/en-us/library/ms525396.aspx
Inheritance (C# Programming Guide)
http://msdn.microsoft.com/en-us/library/ms173149.aspx
Desenvolvedor Cinco Estrelas
A Microsoft atualizou o programa Desenvolvedor Cinco Estrelas.
Veja o conteúdo de cada Estrela :
1ª Estrela:
Introdução ao desenvolvimento em Microsoft .NET
2ª Estrela:
Desenvolvimento de aplicações Web com ASP.Net;
Desenvolvimento de aplicações
Windows com Winforms
3ª Estrela:
Acesso a dados avançados;
Web Services;
Segurança no desenvolvimento
4ª Estrela:
Desenvolvimento de aplicações para Windows Vista;
Microsoft .NET Framework 3.0;
Microsoft InfoCard: Windows Presentation Foundation (WPF)
Apenas o conteudo da 5ª Estrela não foi detalhado, constando apenas que será uma surpresa.
Acesse http://www.mslatam.com/brasil/dce/
[]s