Bom dia a todos, hoje em dia em nossas aplicações é comum fazer inserções em banco de dados e mostrar os dados
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
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.