terça-feira, 17 de maio de 2011

C# - Strings


O método Substring
O método substring é um método não estático que permite pegarmos uma porção de uma string. Para utilizarmos o método substring, basta chamar o método a partir de uma variável string ou mesmo de uma string literal, conforme o exemplo.
string nome = "Testando da Silva";
string sobreNome = nome.Substring(12,5);
O método substring aceita como parâmetro a posição inicial que queremos obter e quantos caracteres devem ser extraídos. Caso não seja informado o número de caracteres a ser extraído, a função retornará o restante da string a partir da posição inicial informada.

O método IndexOf
O método IndexOf é utilizado para localizar uma determinada palavra dentro da string. Este método retornará a posição da string desejada. Caso a string não seja encontrada, será retornado o valor -1.
string nome = "Testando da Silva";
int pos = nome.IndexOf("Silva");
//A partir do índice 5
int pos2 = nome.IndexOf("Silva", 5);
Conforme vimos no exemplo, é possível informar a posição inicial para busca como um parâmetro adicional.

Funções ToUpper e ToLower
As funções ToUpper e ToLower permitem colocar uma string em letra minúsculas ou maiúsculas, conforme o exemplo a seguir.
string nome = "Maurício";
nome = nome.ToUpper();
nome = nome.ToLower();
Funções StartsWith e EndsWith
As funções startswith e endswith verificam se a string começo ou termina com uma determinada palavra ou caracter. Estas funções retornam um valor booleano (true ou false).
string arquivo = "comctl32.dll";
if(nome.StartsWith("com"))
    Console.WriteLine("Começa com COM!");
if(nome.EndsWith(".dll"))
    Console.WriteLine("É uma dll!");

Funções TrimStart, TrimEnd e Trim
As funções de Trim servem para remover espaços em branco das strings. A função TrimStart remove os espaços em branco do início da string, já a função TrimEnd remove os espaços em branco do final da string. A função Trim remove os espaços em branco do inicio e do fim da string.
     string nome = "   MAURICIO    ";
     nome = nome.TrimEnd();
     nome = nome.TrimStart();
     nome = nome.Trim();

Funções PadLeft e PadRight
As funções PadLeft e PadRight servem para preencher uma string a esquerda ou a direita com um caracter especificado. Os exemplos a seguir mostra o uso das funções PadLeft e PadRight.
    string nome = "Mauricio";
    nome = nome.PadRight(10, ' ');
    // "Mauricio  "
    string codigo = "123";
    codigo = codigo.PadLeft(6, '0');
    // "000123"

Funções String.Join e String.Split
A função Split serve para quebrar uma string em um array de strings de acordo com um separador. Ao contrário da função split, a função Join concatena um array de string inserindo um separador.
string linha = "Teste, 10, 20, 10/06/2007";
string[] campos = linha.Split(',');
string linhaNova = String.Join(';', campos);

A Função String.Format
A função String.Format é uma das funções mais versáteis da classe string. Esta função permite a criação de uma string baseada em um padrão. Podemos colocar dentro do padrão da string de formatação alguns tokens que poderam ser substituídos por variáveis passadas por parâmetro no comando format.
string teste = String.Format("Vou colocar o {0} aqui.", "parâmetro");
No exemplo acima, o padrão da string (primeiro parâmetro) contém um token {0}. Este token indica que este valor deve ser substituido pelo segundo parâmetro passado para a função (neste caso a palavra “parâmetro”).
sTeste = String.Format("Formatação de string com {0} parâmetro. ",
    "Agora são {1}. Valor numérico: {2}", 1, Now(), 15.5);
No exemplo acima, temos o padrão da string com mais de um token, com números de 0 à 2. A função também recebe 3 parâmetros adicionais que correspondem aos valores que serão substituídos na string. Além de informarmos os tokens, podemos informar regras de formatação que serão utilizadas de acordo com o tipo de dado passado por parâmetro, conforme o exemplo,
sTeste = String.Format("Custom Format: {0:d/M/yyy HH:mm:ss}", dtHoje);
sTeste = String.Format("Formatação do número inteiro: {0:D}.", iNumero);
sTeste = String.Format("Formatação do número inteiro: {0:D4}.", iNumero);

A classe StringBuilder
Apesar da versatilidade da classe string, operações com string podem consumir muitos recursos e causar perda de desempenho. Isto ocorre porque a cada operação o framework cria um novo buffer para a string resultante da operação, ao invés de aproveitar o buffer que está sendo utilizado. Isto é mais aparente em operações de concatenação.
Para não criar este tipo de problema, podemos utilizar a classe StringBuilder, do namespace System.Text. Esta classe permite a criação de strings aproveitando o buffer utilizado, o que torna o código mais eficiente.
No exemplo a seguir temos um trecho de código com uma operação feita de forma ineficiente e outra mais eficiente usando o stringBuilder, veja a diferença.
// Codigo ineficiente
string sql;
sql =  "SELECT * FROM Products";
sql += " WHERE CategoryId=1 AND";
sql += "       AND UnitPrice>10";
// Codigo Eficiente
StringBuilder sb =
    new StringBuilder();
sb.Append("SELECT * FROM Products");
sb.Append(" WHERE CategoryId=1 AND");
sb.Append("       AND UnitPrice>10");
sql = sb.ToString();

quarta-feira, 16 de fevereiro de 2011

C# - Response.Redirect numa nova janela

É impossível do lado do servidor porque um redirecionamento no servidor provoca uma resposta HTTP especial para ser enviado para o cliente. O nativo de execução do browser interpreta o código de resposta especial e envia o utilizador para o destino. Não há nenhum mecanismo embutido ou padrão para especificar uma nova janela do lado do servidor. A única maneira de abrir uma nova janela é para que seja iniciado no lado do cliente, seja através de script ou clicar em um link.


<asp:ImageButton ID="ImageButton65" runat="server" onclick="printtable" OnClientClick="redirect('ola')"  ImageURL="../Imagens/imprimir.png" style="height: 25px"/>


<script type="text/javascript">
       function redirect(a) {


           window.open('report.aspx', '_blank',"Report", "width=190,height=400");
       }
</script>




terça-feira, 15 de fevereiro de 2011

ASP.NET - Relatórios com o ReportViewer


Assumindo que você tenha conseguido fazer o download e ter instalado o ReportViewer vamos a um exemplo prático de como você pode criar um relatório em uma página web para exibir os dados de uma tabela Clientes do banco de dados Clientes.mdf
Nota: Para este exemplo eu vou utilizar o SQL Server 2005 Express , criar um banco de dados Clientes.mdf e uma tabela Clientes com os seguintes campos: Codigo,Nome,Endereco,Foto e Renda conforme mostrado na janelaDataBase Explorer:Para saber como criar um banco de dados, uma tabela e incluir dados no SQL Server 2005 Express leia os artigos:

Vamos então arregaçar as mangas e por a mão na massa...
1- Abra o VWD e crie um novo Web Site com o nome de aspnetRelatorio (ou algo parecido)
2- Selecione a página Default.aspx e no modo Design abra a ToolBox e procura na aba Data pelo componente ReportViewer.(Se você instalou o add-in corretamente ele deverá aparecer neste local).  Selecione o componente e arraste-o e solte na páginaDefault.aspx e você verá o descritor do ReportViewer exibido conforme a figura abaixo:
3- Selecione a opção Design a new Report do descritor
4- Será exibido a janela Design do ReportView exibindo o relatório Report1.rdlc conforme a figura abaixo:
Perceba que a ToolBox apresenta um novo formato com a Aba Report Items exibindo os objetos : Pointer,TextBox,Line,Table,Matrix,Rectangle,List,etc...
Vamos trabalhar com objeto Table arrastando e soltando o mesmo na seção Body do descrito do ReportViewer. Fazendo isto obtemos:
Altere a visualização para a aba WebSite Data Sources e a seguir clique no em Add New Data Source. O assistente de configuração irá surgir , selecione a banco de dados clientes.mdf e clique em Next>
Prossiga até incluir a tabela Clientes e usando o Query Builder construir a  instrução SQL para exibir os dados da tabela Clientes conforme abaixo:
Ao terminar você será levado de volta ao Descrito do relatório e a aba WebSite Data Sources estará exibindo o dataset conforme figura a seguir:
Inclua mais uma coluna no objeto Table inserido no descritor clicando com o botão direito do mouse sobre o objeto e selecionando a opção: Insert Column to the Right
A seguir arraste cada um dos campos do dataset para o descritor conforme a figura abaixo e o relatório estará pronto para exibir os dados da tabela Clientes.
Você pode configurar o relatório alterando a fonte, a cor , etc. Abaixo o relatório que formatei para exibição:
Volte para a página Default.aspx e selecione em Choose Report selecione o relatório que acabamos de criar acima:
Basta executar a o projeto no servidor ASP.NET e você verá o relatório ser exibido conforme figura abaixo:
Note que você tem a opção de exportar o relatório no formato Excel ou PDF.
Como acabei de mostrar que você tem a disposição uma ferramenta poderosa e grátis para gerar relatórios em páginas asp.net; mas nem tudo são flores e eu gostaria de alertá-lo para os seguintes fatos:
1- Se você distribuir sua aplicação em um computador que não tem o VS 2005 instalado, você não pode assumir necessariamente que o controle ReportViewer esta disponível; mesmo depois de ter instalado a .NET Framework 2.0.  Você pode contornar este problema efetuando o download do Report Viewer Redistributable - http://www.microsoft.com/downloads/details.aspx?FamilyID=8a166cac-758d-45c8-b637-dd7726e61367 - Outra alternativa é construir um programa de Setup a partir do Visual Studio (Professional) para distribuir sua aplicação. Assim que for detectado que sua aplicação usa o ReportViewer o mesmo será incluído na distribuição da sua aplicação.
2- O Visual Basic 2005 Express e C# Express não incluem o controle ReportViewer. Isto significa que se você estiver usando o VB 2005 Express ou C# Express para desenvolver uma aplicação você precisa primeiro efetuar o download e a seguir instalar o Report Viewer redistributable na sua máquina de desenvolvimento a fim de compilar junto com o projeto. Você precisa também instalar o Report Viewer Redistributable em toda a máquina de destino na qual você esta instalando a sua aplicação.
3- O VB 2005 Express e o C# 2005 Express não incluem um descritor para você desenhar os relatórios.
Apesar destas controvérsias você não pode reclamar mais que não tem uma ferramenta para gerar relatórios na web em suas páginas ASP.NET.
Pegue o código completo do projeto aqui :  aspnetRelatorio.zip (sem a base de dados)
referências:  http://msdn2.microsoft.com/en-us/library/ms251671(vs.80).aspx

segunda-feira, 14 de fevereiro de 2011

ASP.NET - Leitor de RSS


Olá pessoal, neste artigo irei mostrar como construir um leitor de RSS usando ASP.NET de maneira simples e com poucas linhas de código. Usaremos também o SQL Server.
Faço este artigo com base na videoaula de ASP.NET de Luiz Maia, do Portal Linha de Código, mediante autorização do mesmo. Acompanhem o passo-a-passo:
Para quem não conhece, RSS é a sigla de Really Simply Sindication e é uma forma muito usada para organizar informações provenientes de diversos sites e blogs da internet. Usa um formato de armazenamento de arquivos baseado no XML. Com esse leitor que criaremos, conseguimos acessar os famosos Feeds RSS, as fontes de informações de qualquer lugar da web. Ou seja, um Feed é um arquivo XML atualizado pelo site que o fornece, o qual podemos acessá-los através desse leitor que iremos criar.
Comece abrindo o SQL Server, crie um DataBase com o nome DBRss e crie uma tabela com o nome RSS. Nesta tabela, crie 3 colunas, como mostra a imagem abaixo:
Lembre-se de deixar a coluna IDRss como Identity.
Com as tabelas criadas, faça um INSERT para adicionar alguns link’s de RSS que irão alimentar nosso leitor. Para este exemplo, adicionei 5 link’s, mais você pode adicionar quantos quiser em sua tabela:
Com a instrução SQL SELECT * FROM RSS, vemos que os dados foram inseridos na tabela:
Ok, nossa tabela está com os dados que alimentarão nosso leitor. Agora vamos abrir o Visual Studio e criar um novo WebSite com o nome LeitorRSS.
Na página que se abriu, arraste da Toolbox um DropDownList e, na SmartTag que se abre, clique em Choose Data Source.
Na tela que se abre, clique em New Data Source, clique em DataBase e dê OK.
Nesta tela, irá perguntar qual DataBase será utilizado como fonte de dados do DropDownList, clique em New Connection. Na tela que surge, selecione o servidor SQL, seu DataBase, teste a conexão e clique em OK. Voltando para a tela, clique em Next.
Clique em Next na próxima tela, que pede pra salvar a string de conexão. Na próxima tela, selecione as 3 colunas de nossa tabela, que serão usadas como fonte de dados e clique em Next.
Se quiser, clique em Test Query e depois clique em Finish.
Agora no DataField, escolha o NomeRss e no ValueField o LinkRss.
Pronto, nosso DropDownList já está populado com os dados da tabela, que contém os link’s RSS.
Agora vamos arrastar da ToolBox, do submenu Data, o controle GridView. Faça algumas configurações na Smart Tag do GridView. Primeiro clique em Auto Format e escolha um estilo para nosso GridView.
Depois clique em Edit Columns, desmarque a opção Auto-generate Fields, adicione umHyperLinkField, altere o Header Text para Título, escolha o Target para _blank, para que quando o usuário clicar no RSS, ele abra em uma nova janela ou aba.
Altere o campo DataNavigateUrlField, digitando link, que é o campo que vem do XML. Altere também o campo ShowHeader para false e o campo DataTextField para title, que também virá do XML, dos RSS’s. Pronto, a aparência final de nosso GridView será essa:
Agora vamos codificar para que nosso GridView nos retorne os dados que vierem do banco quando for selecionado no DropDownList o Feed. Aperte F7 para ir a página de códigos e crie o seguinte método:
01private void PopulaGridView(string rss)
02 
03{
04 
05try
06 
07{
08 
09//instancio o DataSet e uso o comando ReadXml
10 
11//passando como parâmetro a variável rss
12 
13DataSet ds = new DataSet();
14 
15ds.ReadXml(rss);
16 
17//passo como DataSource ao meu GridView o ds.Tables, com  o valor 2
18 
19//como Default, usando a propriedade DefaultView e uso o método DataBind
20 
21GridView1.DataSource = ds.Tables[2].DefaultView;
22 
23GridView1.DataBind();
24 
25}
26 
27catch (Exception)
28 
29{
30 
31throw;
32 
33}
34 
35}
No método acima, instanciei o DataSet, chamei o método ReadXml, passando como parâmetro a variável rss, que representa o campo link de nossa base de dados. Com isso, obtemos os feeds rss. Depois atribuímos o item da tabela 2 (valor padrão) ao DataSource de nosso GridView. E por último usamos o comando DataBind.
PS: Como observação, digo que esses arquivos XML possuem como padrão 6 tabelas, que são a RSS, a Channel, a Item, a Category, a Attribute e a GeoID. Neste caso estamos utilizando a 3ª tabela, que é a Item. Por exemplo, abra no navegador um dos feeds RSS que você gravou no banco de dados, clique com o botão direito e clique em Exibir Código-Fonte que você verá a Channel e a Item, pelo menos.
Agora volte ao modo Design, clique no DropDownList, vá em Propriedades e altere a propriedade AutoPostBack para true, para que cada vez que for trocado um valor no DropDownList, a página sofra um postback. Nesta mesma janela de Propriedades, dê dois cliques no evento SelectedIndexChanged do DropDownList e chame o método que acabamos de criar:
1protected void ddlRss_SelectedIndexChanged(object sender, EventArgs e)
2 
3{
4 
5PopulaGridView(ddlRss.SelectedValue);
6 
7}
Chamei o método passando como parâmetro o DropDownList.SelectedValue, que será o RSS selecionado pelo usuário, ou seja, a cada valor selecionado, a página sofrerá um postback e atualizará o grid. Quem garante essa alteração é a propriedade AutoPostBack, que foi definida como true.
Salve seu projeto e compile. Escolha um feed no DropDownList e veja o resultado:
Como ele é do tipo HyperLink, aparece desta forma e, quando clicado, irá abrir em uma nova janela ou aba, já que escolhemos o target dele como _blank.
Se desejarmos aumentar o número de feed, é só fazermos um Insert na tabela de RSS. Simples e com poucas linhas de código.
Assim finalizo nosso artigo,
Para quem se interessar, disponibilizo o código fonte e o script desse projeto aqui.
Créditos à Luiz Maia, que fez as videoaulas e ao Linha de Código, por onde pude baixá-las (mediante assinatura), estudá-las e posteriormente fazer este artigo.
Quaisquer dúvidas, mandem emails para wellingtonbalbo@gmail.com ou deixem nos comentários deste artigo que responderei o mais breve possível.
Até o próximo artigo!