LAYERDEV

 Busca Online:
 

Seja bem vindo(a) Visitante, voc no est logado deseja logar
na comunidade ASPNETi.COM e participar de servios e promoes ? clique aqui.

Adicionar primeiro dados em um GridView e depois na base de dados usando Transaction.



Data Publicação: 22/5/2007 17:35:19
Total de visualizações: 8374

comente
Diminuir o tamanho das letras Aumentar o tamanho das letras


Bom dia a todos, hoje em dia em nossas aplicações é comum fazer inserções em banco de dados e mostrar os dados em um GridView após a inserção. O objetivo deste artigo é mostrar como fazer para adicionar primeiro os valores em um gridview e depois de ter inserido quantas linhas quiserem no grid, adicionar todas elas na base de dados. Isso seria bastante prático em um cadastro de funcionário, onde pudesse informar vários telefones para cada funcionário cadastrado. Irei utilizar o VS 2005 com o sql server express 2005

Vou utilizar neste exemplo uma tabela simples de telefone onde o usuário pode informar o ddd, número e o tipo de telefone.

 

Primeiro vamos criar um banco de dados e uma tabela como a imagem abaixo:

 

 

O layout da tela é esse:

 

 

 

Código HTML:

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

<!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">

<title>Untitled Page</title>

</head>

<body>

<form id="form1" runat="server">

<div>

<table>

<tr>

<td colspan="2">

<hr>

Informe vários telefones:<br />

<br />

</td>

</tr>

<tr>

<td valign="top" style="width: 151px">

DDD:

</td>

<td style="width: 101%">

<asp:TextBox ID="txtDDD" runat="server" MaxLength="3" Width="30px"></asp:TextBox></td>

</tr>

<tr>

<td valign="top" style="width: 151px">

Número:

</td>

<td style="width: 101%">

<asp:TextBox ID="txtNumero" runat="server" MaxLength="8" Width="130px"></asp:TextBox></td>

</tr>

<tr>

<td valign="top" style="width: 151px">

Tipo:

</td>

<td style="width: 101%">

<asp:DropDownList ID="dropTipo" runat="server">

<asp:ListItem>Selecione</asp:ListItem>

<asp:ListItem>Residência</asp:ListItem>

<asp:ListItem>Celular</asp:ListItem>

<asp:ListItem>Trabalho</asp:ListItem>

</asp:DropDownList></td>

</tr>

<tr>

<td>

<asp:Button ID="btnAddTelefone" runat="server" Text="Adicionar" OnClick="btnAddTelefone_Click" />

</td>

<td>

</td>

</tr>

<tr>

<td colspan="2">

<br />

<asp:GridView ID="grdTelefones" runat="server" AutoGenerateColumns="False" CellPadding="4"

GridLines="Horizontal" BorderColor="#336666" BorderStyle="Double" Width="278px"

OnRowDeleting="grdTelefones_RowDeleting" BackColor="White" BorderWidth="3px">

<FooterStyle BackColor="White" ForeColor="#333333" />

<Columns>

<asp:BoundField DataField="DDD" HeaderText="DDD" />

<asp:BoundField DataField="Numero" HeaderText="Numero" />

<asp:BoundField DataField="Tipo" HeaderText="Tipo" />

<asp:TemplateField HeaderText="Excluir">

<ItemTemplate>

<asp:ImageButton ID="ImageButton1" runat="server" CausesValidation="False" CommandName="Delete"

ImageUrl="~/Imagem/icon-delete.gif" />

</ItemTemplate>

</asp:TemplateField>

</Columns>

<RowStyle BackColor="White" HorizontalAlign="Center" ForeColor="#333333" />

<SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" />

<PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" />

<HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" HorizontalAlign="Center" />

</asp:GridView>

</td>

</tr>

<tr>

<td colspan="2">

<br />

<asp:Button ID="btnSalvar" runat="server" Text="Salvar todos os Telefones no banco" />

</td>

</tr>

</table>

</div>

</form>

</body>

</html>

 

Agora vamos ao código:

Primeiro vou utilizar uma propriedade para armazenar os dados do telefone.

private ArrayList Telefones

   {

         get

      {

         Object value = this.ViewState["Telefones"];

         if (value == null)

         {

                  value = new ArrayList();

                  this.ViewState["Telefones"] = value;

         }

         return (ArrayList)this.ViewState["Telefones"];

     }

      set

      {

            this.ViewState["Telefones"] = value;

      }

}

Veja que estou atribuindo um objeto ViewState do tipo ArrayList. Desta forma vou atribuir os telefones adicionados no viewstate para que os valores não se percam toda vez que adicionar mais um telefone.

 

Agora vamos criar uma classe TelefoneVO

 

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

/// <summary>

/// Summary description for TelefoneVO

/// </summary>

[Serializable]

public class TelefoneVO

{

public TelefoneVO()

{

}

private int ddd;

private String numero;

private String tipo;

 

public int DDD

{

get { return ddd; }

set { ddd = value; }

}

public String Numero

{

get { return numero; }

set { numero = value; }

}

public String Tipo

{

get { return tipo; }

set { tipo = value; }

}

}

Nós criamos um objeto do tipo TelefoneVO e uma propriedade do tipo array list que irá conter vários telefones.

Para carregar o grid vamos criar um método que irá atribuir ao DataSource do GridView a propriedade Telefone onde irá ter os telefones adicionados.

private void carregarGridTel()

{

grdTelefones.DataSource = Telefones;

grdTelefones.DataBind();

}

E agora vamos construir o código do botão Adicionar:

protected void btnAddTelefone_Click(object sender, EventArgs e)

{

// Cria um novo TelefoneVO

TelefoneVO tel = new TelefoneVO();

//Atribui os valores digitados ao TelefoneVO

tel.DDD = Convert.ToInt32(txtDDD.Text);

tel.Numero = txtNumero.Text;

tel.Tipo = dropTipo.SelectedValue.ToString();

// Cria um novo arrayList e adiciona o telefone ao arrayList

ArrayList _listTel = new ArrayList();

_listTel.Add(tel);

// Neste momento irei percorrer todos os item já adicionados

// na propriedade Telefones para verificar se o telefone já

// foi adicionado

for (int i = 0; i <= (Telefones.Count - 1); i++)

{

TelefoneVO tel1 = (TelefoneVO)Telefones[i];

if (tel.DDD.Equals(tel1.DDD) && (tel.Numero.Equals(tel1.Numero) & tel.Tipo.Equals(tel1.Tipo)))

{

// Se sim limpa a lista e sai do for.

_listTel.Clear();

break;

}

}

// Verifica se a list está não está vazia

if (_listTel.Count != 0)

{

// Se sim adiciona o telefone a propriedade

// ViewState e carrega o GridTel.

Telefones.Add(tel);

carregarGridTel();

}

else

{

// Se não mostra mensagem

String _message = "window.alert(Telefone já Adicionado.);";

Page.ClientScript.RegisterStartupScript(this.GetType(), "Error", _message, true);

}

}

Caso a gente queira excluir um telefone adicionado antes de salvar no banco basta excluí-lo da propriedade Telefones e mandar carregar o gridTel novamente.

Segue o código:

protected void grdTelefones_RowDeleting(object sender, GridViewDeleteEventArgs e)

{

Telefones.RemoveAt(e.RowIndex);

carregarGridTel();

}

Segue agora o código para salvar todos os valores do gridview no banco de dados. Repare que para tal procedimento é necessário utilizar Transaction.

protected void btnSalvar_Click(object sender, EventArgs e)

    {

        string conex = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True";

 

        SqlConnection con = new SqlConnection(conex);

        con.Open();

 

        // Cria a Transaction

        SqlTransaction tn = con.BeginTransaction();

 

        int i = 0;

 

        // Percorre todos os telefones informados

        foreach (TelefoneVO tel in Telefones)

        {

            try

            {

                SqlCommand cmmd = new SqlCommand();

 

                // Cria o comando sql para inserção

                StringBuilder insertSQL = new StringBuilder();

                insertSQL.Append("Insert into Tb_Telefones (ddd, numero, tipo) Values ");

                insertSQL.Append("( '" + tel.DDD + "', ");

                insertSQL.Append("'" + tel.Numero + "', ");

                insertSQL.Append("'" + tel.Tipo + "')");

 

                // Adicionas os parâmetros do comando

                cmmd.CommandText = insertSQL.ToString();

                cmmd.CommandType = CommandType.Text;

                cmmd.Connection = con;

                cmmd.Transaction = tn;

 

                // Executa o comando

                i = cmmd.ExecuteNonQuery();

            }

            catch

            {

                tn.Rollback();

                con.Close();

                break;

            }

        }

 

        if (i > 0)

        {

            tn.Commit();

            con.Close();

 

            String _message = "window.alert('Telefones Adicionados com Sucesso.');";

            Page.ClientScript.RegisterStartupScript(this.GetType(), "Error", _message, true);

        }

 

 

 

    }

 

 

 

Execute a aplicação e preencha os valores como a tela abaixo:

 

Clique no botão salvar  todos os telefones no banco de dados. Abra o banco de dados e veja que todos os telefones adicionados no grid foram salvos.

 

Finalizando...

Com este exemplo vimos como é fácil inserir várias linhas em um GridView e depois inseri-las todas no banco de dados usando Transaction.

Agora basta aperfeiçoar este exemplo para que possa ser utilizado em suas aplicações e sistemas Webs.

Bom é isso ai galera, espero que tenho ajudado com este meu primeiro artigo a muitos e qualquer dúvida ou sujestões para melhoria do código estejam a vontade.

Contato: ebenezer05@gmail.com;

Abraços e até a próxima.

 



Total de visualizações: 8374
voltar   comente  subir


Comentários:

Comentado por: Fabio Galante Mans - 23/5/2007 8:44:48
Muito bom, parabéns.
Comentado por: Zeus - 18/10/2007 14:56:16
Cara, tô começando a dar os primeiros passos em WebForm, mas achei sua explicação super didática perto do que tem visto por aí. valew!

Comente (dê sua opinião): VOCÊ PRECISA LOGAR

Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Pesquisando informações que estejam entre as datas Informadas com Stored Procedure.
Utilizando método Sort em uma lista genérica
Criar um post de Mensagens sem utilizar banco de dados e sim arquivos.
Utilizando DLL de acesso a dados genérica – Parte 1
Criando uma DLL de acesso a dados Genérica utilizando o namespace System.Data.Comom
Criando um método para exibir vários alerts na tela
Neste artigo irei mostrar como utilizar o controle ImageMap que veio na versão 2.0 do Asp.NET.
Adicionar primeiro dados em um GridView e depois na base de dados usando Transaction.
Criando parâmetros não obrigatórios em procedures
Sobre o Autor
  [sumir] [aparecer]
 
Ebenézer de Souza Possui Superior em Bacharelado em Sistemas de informação e é desenvolvedor de aplicações e sistemas web na plataforma .NET. Atua como analista/programador na Corretora de Seguros BRB e escreve artigos para comunidade ECodigo.com.br

Informaes Online
Usurios Online: 387
Artigos:  750
Vdeos:  61
PodCast's:  44
Frum:  3128
Empregos:  1385
Usurios Cadastrados: 6163
Publicidade
LAYERDEV




Vdeos Publicados
 

Duas dicas de internet - Google RealTime e OpenDNS

Desconfie sempre da internet e emails

Microsoft Office online no Safari funcionando

Inovação Visual Studio .NET 2010 - parte 4

Office Live online

TAB TAB na ferramenta Visual Studio .NET

Apresentação do IMC - Sistema de Controle de Peso Mobile

Inovação Visual Studio .NET 2010 - parte 3

Inovação Visual Studio .NET 2010 - parte 1

Download de vídeos com o Safari

Criando Chart - Novo componente integrado com o Visual Studio.NET 2010

Serviços: SAC e SMS integrado

Café com TI - Info sobre o Visual Studio.NET 2010 - WebConfig

Café com TI - Info sobre o Visual Studio.NET 2010

Café com TI - Vírus se passando por Correios

Café com TI - Novo jeito de mandar e-mail com vírus

Café com TI - Formatando todo tipo de String

Resolvido erro do Banco do Brasil no browser

Erro no site do Banco do Brasil com o Safari

Duas dicas do Snow Leopard

Incompatibilidade no Snow Leopard

E-mail com vírus, veja os detalhes

Café com TI - Continuando a configuração de Themes no site

Café com Ti - Banner Rotativo

Café com TI - Evento Eco Brasília

Café com TI - Themes dentro do ASPNETi.COM

Café com TI - Trabalhando com o iCal no Macbook

Café com TI - Deixando o rodapé do seu site fixo

Café com TI - Windows 7 sendo utilizado sem qualquer incompatibilidade

Café com Ti - ASP.NET - Explicando o componente ModalDialogExtender do Ajax Toolkit

Café com TI - Indexação de URL com ASP.NET

Café com TI - Configurando Mail para sua conta no HotMail
Enquete ASPNETi.COM
 Os podcasts tem sido proveitoso pra você?

Favor logar para votar
 
Publicidade Vertical
NETITC