pokemom? pokebola?
Oscar Casagrande
quinta-feira, 5 de agosto de 2010
quarta-feira, 4 de agosto de 2010
Pé de break!? Tá bem louco! Isso é algum passo de Hip Hop?? Abraços. Gui
Pré de break = roda presa = braço curto = enrolado
rs
Sou um pokemon, moro na pokebola, fica comigo ou nem rola D= (se vc fosse mulher")
só a pokebola for de 4 rodas e não for carro popular!!!
domingo, 14 de fevereiro de 2010
Repeater dentro de Repeater (DataList dentro de DataList ou GridView dentro de GridView)
Pessoal, imagine a seguinte situação, você tem uma lista de um determinado objeto e cada objeto dessa lista tem uma propriedade que é uma lista de um determinado objeto e você precisa popular um Repeater, vamos dar nomes aos objetos, suponha que você tenha uma lista de professores e cada professor tem seus alunos, bem, alguns irão dizer, fácil, cada vez que o Repeater fizer um ItemDataBound basta fazer um busca novamente no banco de dados e listar o resultado, como sempre me deparo com essa situação e vira e mexe algum me pergunta se essa é a melhor maneira de fazer resolvi escrever um artigo.
É muito simples, se a sua coleção já vem populada basta você passar essa lista de objetos para o outro controle dentro do seu Repater (nesse caso outro Repeater), e isso será feito a cada ItemDataBound.
Classes
Temos as seguintes classes:
///
/// Classe mãe
///
public abstract class Pessoa
{
private string _nome = string.Empty;
public string Nome
{
get { return _nome; }
set { _nome = value; }
}
public Pessoa() { }
}
///
/// Professor implementa Pessoa
///
public class Professor : Pessoa
{
private string _materia = string.Empty;
public string Materia
{
get { return _materia; }
set { _materia = value; }
}
///
/// Um professor tem uma lista de alunos
///
private System.Collections.Generic.List<Aluno> alunos = new System.Collections.Generic.List<Aluno>();
public System.Collections.Generic.List<Aluno> Alunos
{
get { return alunos; }
set { alunos = value; }
}
public Professor(string nome, string materia, System.Collections.Generic.List<Aluno> alunos)
{
Nome = nome;
Materia = materia;
Alunos = alunos;
}
}
///
/// Aluno implementa Pessoa
///
public class Aluno : Pessoa
{
private string _turma = string.Empty;
public string Turma
{
get { return _turma; }
set { _turma = value; }
}
public Aluno(string nome, string turma)
{
Nome = nome;
Turma = turma;
}
}
WebForm
Agora que já conhecemos nossas classes vamos para a implementação disso em uma pagina.
Primeiro vamos criar um Repeater na pagina e dentro dele criaremos um segundo repeater, como no exemplo abaixo:
<asp:Repeater ID="ProfessorRepeater" runat="server" OnItemDataBound="ProfessorRepeater_ItemDataBound">
<ItemTemplate>
Professor:
<%# Eval("Nome") %>
<br />
Matéria:
<%# Eval("Materia") %>
<br />
Alunos:
<asp:Repeater ID="AlunoRepeater" runat="server">
<HeaderTemplate>
<table>
<tr style="font-weight: bold">
<td>
Nometd>
<td>
Cursotd>
tr>
HeaderTemplate>
<FooterTemplate>
table>
FooterTemplate>
<ItemTemplate>
<tr style="background-color: Gray">
<td>
<%# Eval("Nome") %>
td>
<td>
<%# Eval("Turma")%>
td>
tr>
ItemTemplate>
<AlternatingItemTemplate>
<tr style="background-color: Silver">
<td>
<%# Eval("Nome") %>
td>
<td>
<%# Eval("Turma") %>
td>
tr>
AlternatingItemTemplate>
asp:Repeater>
ItemTemplate>
<SeparatorTemplate>
<hr />
SeparatorTemplate>
asp:Repeater>
Atente para o detalhe que o repeater AlunoRepater está escrevendo as propriedades Nome (que vem de Pessoa) e turma (que é da classe Aluno), bom, mas isso não irá funcionar dessa maneira. Vejamos no code behind da pagina como é a implementação disso.
Code Behind
No PageLoad os objetos são criados e populados.
protected void Page_Load(object sender, EventArgs e)
{
Page.Title = "Repeater dentro de Repeater (DataList dentro de DataLista ou GridView dentro de GridView)";
// lista de alunos que será atribuída aos professores
List<Aluno> alunosEpaminondas = new List<Aluno>();
alunosEpaminondas.Add(new Aluno("Alan", "Sistemas da Informação"));
alunosEpaminondas.Add(new Aluno("Fabio", "Ciência da Computação"));
alunosEpaminondas.Add(new Aluno("Marcelo", "Desenvolvimento de Sistemas Web"));
// Só para não falar que os professores tem os mesmos alunos
List<Aluno> alunosAdolfo = new List<Aluno>();
alunosAdolfo.Clear();
alunosAdolfo.Add(new Aluno("Carol", "Análise de Sistemas"));
alunosAdolfo.Add(new Aluno("Bruno", "Banco de Dados"));
// lista de professores
List<Professor> professores = new List<Professor>();
professores.Add(new Professor("Epaminondas", "Gestão de Projetos", alunosEpaminondas));
professores.Add(new Professor("Adolfo", "Programação Orientação a Objetos", alunosAdolfo));
ProfessorRepeater.DataSource = professores; // define o DataSource do repeater como a lista de objetos professores
ProfessorRepeater.DataBind();
}
No controle ProfessorRepeater, no evento ItemDataBound que o controle AlunoRepeater é populado, veja como é simples fazer a conversão do item do repeater que é passado.
protected void ProfessorRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// verifica se o item é do tipo ItemType ou AlternatingItem, se não for retorna e não continua o processamento
if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return;
// verifica se o objeto AlunoRepeater existe dentro do item
if (e.Item.Controls.Contains((Repeater)e.Item.FindControl("AlunoRepeater")))
{
// cria um objeto Repeater e define-o como o objeto AlunoRepeater do item
Repeater alunoRepeater = (Repeater)e.Item.FindControl("AlunoRepeater");
// converte o item (linha do repeater) para um professor e define a propriedade Alunos como DataSource do repeater
alunoRepeater.DataSource = ((Professor)e.Item.DataItem).Alunos;
alunoRepeater.DataBind();
}
}
Super simples e tranqüilo, não há segredos nisso, a grande sacada é não ter que conectar ao banco novamente apenas obter os outros objetos. É possível utilizar isso também na criação de menus, para exibir a notas fiscais e seus itens, pedidos e seus itens etc. bem, ai vai depender da necessidade de cada projeto.
Espero ter contribuído com esse artigo.
quarta-feira, 2 de dezembro de 2009
MP3 player com DirectX
Windows XP com framework 2.0 ou superior
DirectX
Visual Studio 2008 ou compatível
1º Instalar Microsoft DirectX SDK (June 2006) ou compatível
Vamos lá pessoal, algum dia na vida qualquer um aqui já tentou executar um MP3
utilizando .NET correto? Aí vamos lá e adicionamos um objeto SoundPlayer do namespace
System.Media, quando utilizávamos o método Play()! PAN! Não é possível executar o arquivo
pois o SoundPlayer não suporta o MP3. Utilizaremos o DirectX para nos auxiliar com isso, para
isso a primeiro que devemos fazer é baixar DirectX Software Development Kit no site do
Microsoft através do link
http://www.microsoft.com/downloads/details.aspx?FamilyID=1fd20df1-dec6-47d0-8bef-
10e266dfdab8&DisplayLang=en, apenas 443 MB.
No meu caso eu tive que executar um mp3 em um dashboard de Call Center, o cliente
queria colocar um telão no Call Center com (o gerente desse projeto foi mandado embora
antes da conclusão do projeto, então essa parte do telão não rolou... vai vendo rsrs) e toda vez
em que o nível de atendimento estava abaixo no mínimo aceitável o sistema tinha que tocar
uma sirene, bem fizemos um esquema para ler wav, mas nossa vontade era fazer com mp3!!!
Coisas de desenvolvedor, bem fizemos, mas não foi para produção, não deu tempo, não
importa, esse treco aqui funciona.
2º Criar um projeto Windows Forms Application
Agora com o DirectX SDK crie um novo projeto do tipo Windows Forms Application
com o nome que você achar melhor, bem, não mostrar com usar o OpenFileDialog, isso fica
para outro artigo.
3º Adicionar as referências
Vá ao menu “Project”, clique em “Add Reference”, na aba “.NET”, adicione as
referencias “Microsoft.DirectX” e “Microsoft.DirectX.AudioVideoPlayback”.
4º Adicionar caminho do mp3
Dê um clique duplo no formulário, agora no método Form_Load, crie uma variável do
tipo string com o nome musica e sete o valor dela como o caminho para o seu arquivo mp3
(pois é, um arquivo mp3!!!! Hehe).
5º Adicionar objeto Microsoft.DirectX.AudioVideoPlayback.Audio
Adicione um objeto do tipo Audio (Microsoft.DirectX.AudioVideoPlayback.Audio) com
o nome audio, instancie audio como um novo Audio, e passe como parâmetro o objeto musica
no construtor.
6º Executar “Play”
Agora execute o método “Play” do objeto audio.
7º Código fonte
Abaixo estão os códigos fonte em VB.NET e C#(Sharp).
VB.NET
Imports Microsoft.DirectX.AudioVideoPlayback
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim musica As String = "C:\Documents and Settings\oscar\Meus
documentos\Minhas músicas\Top Gun - Danger Zone.mp3"
Dim audio As Audio
audio = New Audio(musica)
audio.Play()
End Sub
End Class
C#(Sharp)
using System;
using System.Windows.Forms;
using Microsoft.DirectX.AudioVideoPlayback;
namespace DirectXPlayer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string musica = @"C:\Documents and Settings\oscar\Meus
documentos\Minhas músicas\Top Gun - Danger Zone.mp3";
Audio music;
music = new Audio(musica);
music.Play();
}
}
}
Referencias
http://msdn.microsoft.com/en-us/directx/aa937788.aspx
http://msdn.microsoft.com/en-us/directx/default.aspx
http://msdn.microsoft.com/en-us/aa937791.aspx
Pessoal, é só isso, como vocês podem ver é super fácil, espero que tenha agregado
conhecimento. Até a próxima.
segunda-feira, 23 de novembro de 2009
Galeria de fotos com WPF
Windows XP com Framework .NET 3.0 ou superior para rodar a aplicação
Visual Studio 2008 ou compatível
1º Crie uma aplicação do tipo WPF Application
2º No XAML, na tag Windows, mude o atributo title para Galeria de fotos
3º Adicione as bibliotecas System.IO e System com as seguintes linhas
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:io="clr-namespace:System.IO;assembly=mscorlib"
4º Adicione os resources da aplicação com as seguintes linhas, é de onde as fotos serão lidas, entenda o primeiro s:String como local de suas imagens, o segundo é o filtro dos arquivos que serão lidos pela aplicação, mas já vou te explicar que ObjectType é o tipo do objeto que está sendo instanciado pelo ObjectDataProvider e o MethodName é o método desse objetos que será executado, o resto é tranqüilo.
5º Após o Windows.Resources adicione um DockPanel com o atributo LastChildFill setado como True
6º Dentro do DockPanel adicione um ListBox com os seguintes atributos x:Name="imageList", DockPanel.Dock="Top", ItemsSource="{Binding}", IsSynchronizedWithCurrentItem="True" e DataContext="{StaticResource imagens}".
7º Dentro do ListBox coloque as seguintes tag
Super tranqüilo.
Referencias.
http://windowsclient.net/wpf/
http://msdn.microsoft.com/pt-br/library/cc564903.aspx
http://msdn.microsoft.com/en-us/library/ms754130.aspx
quarta-feira, 18 de novembro de 2009
FileWatcher - Observador de arquivos
1º Crie um projeto do tipo Windows Forms Applications.
2º Adicione uma classe com o nome FileWatcher.
3º Crie uma variável do tipo string, privada com o nome pasta.
private string pasta = @"d:\teste";
4º Crie o construtor da classe conforme abaixo.
public FileWatcher()
{
FileSystemWatcher WatchFile = new FileSystemWatcher(pasta, "*.txt");
WatchFile.Created += new FileSystemEventHandler(this.FileCreated);
WatchFile.EnableRaisingEvents = true;
}
5º Agora vamos criar o método Created, faça conforme abaixo. Esse método irá copiar o arquivo de D:\Teste para D:\Teste2 e xcluí-lo da origem
public void FileCreated(object sender, FileSystemEventArgs e)
{
Console.WriteLine(e.Name);
FileInfo fileInfo = new FileInfo(e.Name);
string pastaOrigem = @"D:\Teste";
string pastaDestino = @"D:\Teste2";
string arquivoOrigem = Path.Combine(pastaOrigem, fileInfo.Name);
string arquivoDestino = Path.Combine(pastaDestino, fileInfo.Name);
if (File.Exists(arquivoDestino))
File.Delete(arquivoDestino);
File.Copy(arquivoOrigem, arquivoDestino);
Log(arquivoOrigem, arquivoDestino);
}
private void Log(string preCondicao, string posCondicao)
{
string arquivoLog = Path.Combine(pasta, string.Format("{0}log.txt", string.Format("{0:yyyyMMdd}", DateTime.Now)));
StreamWriter arquivoEscrita = new StreamWriter(arquivoLog, true);
arquivoEscrita.WriteLine(string.Format("{0}|{1}|{2}", preCondicao, posCondicao, DateTime.Now));
arquivoEscrita.Close();
arquivoEscrita.Dispose();
}
7º Instancie um novo FileWacther no Load do formulário.
8º Vamos testar agora, crie uma pasta chamada Teste e uma pasta Teste2, execute a aplicação e crie um arquivo texto (txt) em Teste, veja que o arquivo sumiu! E um novo arquivo chamado AAAAMMDDlog.txt foi criado, esse arquivo contém as informações do nome do arquivo de origem, nome do arquivo destino e data/hora em que ele foi movido. Se você verificar em Teste2 o arquivo estará lá.
OBS: Atenção aos caminhos das pastas, caso não tenha um diretóro D:, coloque no lugar que lhe parecer melhor.
Até a próxima.