Artigo Importar Dados de Excel utilizando ADO

by Bruno Jares 3. December 2011 08:06

Galera postei um artigo e código fonte muito bacana sobre importação de planilha apartir do ADO em:

http://social.technet.microsoft.com/wiki/contents/articles/importar-dados-de-excel-utilizando-ado.aspx

Tags:

JQuery Dialog com Asp.Net

by Bruno Jares 19. June 2011 13:20

Pessoal tenho recebido muitas solicitações de ajuda para a utilização do JQuery Dialog com o Asp.Net portando vou dedicar esse artigo a uma classe que acabei de fazer para ajudar nesse problema. Primeiro vou descrever a classe que faz toda a mágica para depois mostrar sua utilização mas para que quizer pular etapas basta baixar o código de exemplo tstJQueryDialog&AspNet.zip (174.62 kb) e logo se divertir :D .

Segue o código da classe que o WebUserControl do dialogo vai herdar para facilitar a nossa vida.

Classe Controladora do WebUserControl do dialogo

using System.Web.UI;

namespace framework
{
    /// <summary>
    /// Controlado para dialogos com JQuery
    /// </summary>
    public abstract class UCDialogo : UserControl
    {
        /// <summary>
        /// Carrega as configurações do Dialogo
        /// </summary>
        /// <param name="idDivPrincipal">ID da Div principal do dialogo</param>
        /// <param name="largura">Largura do dialogo</param>
        /// <param name="altura">Altura do dialogo</param>
        protected abstract void carregaConfigDialogo(out string idDivPrincipal, out int largura, out int altura);

        /// <summary>
        /// Sobrecarga da renderização do UserControl
        /// </summary>
        /// <param name="writer">Writer</param>
        protected override void Render(HtmlTextWriter writer)
        {
            writer.Write(montaScript());//Adiciona o script a renderização da página
            base.Render(writer);
        }

        /// <summary>
        /// Monta o Script do dialogo em JQuery
        /// </summary>
        /// <returns>Script montado</returns>
        private string montaScript()
        {
            //====== Montando o script do JQuery ======
            string _retorno = @"
<script type='text/javascript'>
    jQuery(function () {
        jQuery('#div#').dialog({
            autoOpen: false,
            modal: true,
            show: 'Transfer', 
            hide: 'Transfer', 
            draggable: true,
            width: #largura#,
            height: #altura#,
            resizable: false,
            overlay: {
                background: 'black',
                opacity: 0.5    
            },
            open: function(event, ui) {  
                jQuery(this).parent().children().children('.ui-dialog-titlebar-close').hide(); 
            },
        });
        jQuery('#div#').parent().appendTo(jQuery('form:first'));
        #mostra#                
    });
</script>
            ";
            //====== Carregando os dados do dialogo ======
            string idDivPrincipal;
            int largura, altura;
            carregaConfigDialogo(out idDivPrincipal, out largura, out altura);
            //====== Alterando os valores dos flags ======
            _retorno = _retorno.Replace( //Mostra ou esconde o dialogo
                "#mostra#",
                Visible ? "jQuery('#div#').dialog('open');" : "jQuery('#div#').dialog('close');"
            );
            _retorno = _retorno.Replace("#div#", "#" + idDivPrincipal); //Seta a DIV do dialogo
            _retorno = _retorno.Replace("#largura#", largura.ToString()); //Seta a largura do dialogo
            _retorno = _retorno.Replace("#altura#", altura.ToString()); //Seta a altura do dialogo
            return _retorno;
        }
    }
}

Como você ja deve ter notado essa classe é abstrata e obriga a implementação do método carregaConfigDialogo esse método é quem informar os parametros para a montagem do javascript do JQuery Dialog,
na implementação desse método devem ser repassados três valores:

  • idDivPrincipal: Nome da div em que o JQuery vai atuar
  • largura: Largura do dialogo
  • altura: altura do dialogo

Ao renderizar o WebUserControl o método Render foi sobrecarregado para adicionar o Script do JQuery no div que foi escolhido ai o dialogo aparece.

Para utilizar a classe basta a classe do seu WebUserControl, que vai ser o dialogo, herdar dessa classe descrita a cima e também implementar o método carregaConfigDialogo como esta demonstrado no exemplo abaixo:

Aspx do WebUserControl:

<div id="dlgTeste" title="Titulo do Diáligo">
    <asp:Label ID="lblNome" runat="server" Text="Nome" AssociatedControlID="txtNome" />
    <asp:TextBox ID="txtNome" runat="server"/>
    <br />
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="OK" />

    <asp:Button ID="Button2" runat="server" onclick="Button2_Click" 
        Text="Cancelar" />

</div>

Code Behind do WebUserControl

using System;
using framework;

public partial class Dialogo : UCDialogo
{
    public string texto
    {
        get { return txtNome.Text; }
        set { txtNome.Text = value; }
    }

    protected override void carregaConfigDialogo(out string idDivPrincipal, out int largura, out int altura)
    {
        idDivPrincipal = "dlgTeste";
        largura = 320;
        altura = 120;
    }

    public event EventHandler QuandoOK;
    protected void Button1_Click(object sender, EventArgs e)
    {
        QuandoOK(this, e);
        Visible = false;
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        Visible = false;
    }
}

Agora a página que itá utilizar o dialogo

Aspx da página

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register src="Dialogo.ascx" tagname="Dialogo" tagprefix="uc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="jquery.js" type="text/javascript"></script>
    <script src="jquery-ui.js" type="text/javascript"></script>
    <link href="jquery-ui.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
        body:
        {
            font-size:small;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <uc1:Dialogo ID="Dialogo1" Visible="false" runat="server" OnQuandoOK="Dialogo1_OK" />

        <asp:Button ID="Button1" CssClass="btnDialogo" runat="server" Text="Mostrar" 
            onclick="Button1_Click" />

    </form>
</body>
</html>

Code Behind do aspx

using System;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Dialogo1.Visible = true;
    }
    protected void Dialogo1_OK(object sender, EventArgs e)
    {
        Button1.Text = "Valor digidato foi " + Dialogo1.texto;
    }
}

Note que para mostrar ou esconder o dialogo basta setar a propriedade Visible do WebUserControl do dialogo. Espero ter ajudado e até a próxima pessoal.

Tags: , ,

Desenvolvimento

Arquitetura MVVM com SilVM

by Bruno Jares 12. June 2011 10:40

 

O MVVM é um pattern que foi criado em 2005 por John Gossman, um dos arquitetos do WPF e Silverlight na Microsoft. O MVVM assemelha-se em alguns aspectos o MVC (Model View Controller) e ao MVP (Model View Presenter), podemos até dizer que ele é uma especialização do MVP adaptado para a arquitetura do WPF e Silverlight. Conceitualmente, o MVVM e o MVP são idênticos, o que os diferencia é que o MVVM é específico para a arquitetura do WPF e Silverlight, e o MVP é independente de plataforma.

O funciomanento dessa arquitetura funciona basicamente da seguinte forma. A camada Model (Modelo) não conhece a View (camada de apresentação) e vice-versa. Na verdade, a View conhece a ViewModel e se comunica com ela através do mecanismo de binding. E são os avançados mecanismos de binding, eventos roteados e comandos roteados, que fazem do MVVM um pattern poderoso para construção de aplicações WPF e Silverlight.

 

Para o Silverlight ou WPF a classe ViewModel que esta no DataContext da tela fica monitorando os Componetes que estão na tela(XAML) através do recurso Bind, assim sempre que o estado dos componentes são alterados a propriedade correspondente na ViewModel é alterada também, Eliienando a necessidade se ficar mapeando os dados entre tela e Classe de entidade.

Vamos agora para a prática. Para facilitar, desemvolvi um framework e esse exemplo que estão disponiveis no CodePlex. inicialmente crie um projeto em Silverlight com a sua preferência.

Após isso adicione referência ao arquivo silvm.dll que esta no codeplex;

Crie uma classe View Model que herda de BaseVM como demostrado na figura

 

Criada essa classe crie uma classe de Entidade ficticia que supostamente sera salva em banco como na figura a seguir.

Agora basta criar a tela na aplicação.

Segue o XAML da tela na figura seguinte.

 

E o code behind da tela:

 

Note que ao pressionar o botão para salvar todas as pripriedades da variável _item ja foram modificadas e as validações ja foram todas realizadas, agora basta consultar a propriedade "errors" da variável _item.

Galera espero ter ajudado com esse meu primeiro artigo que estou postando. Abraços

Tags: , ,

Parceiros

Month List