Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ving

TextBox para DataGrid

Recommended Posts

Pessoal, estou fazendo um programa de vendas, e existem alguns itens digitados em um TextBox que gostaria de ir acumulando em um DataGrid para posteriormente inserir em um banco de dados, no entanto algo que parece tão simples, está se mostrando não ser, (pelo menos pra mim), se alguém puder me dar um exemplo bem simples de como digitar algo em um TextBox, clicar num botão e ir acumulando no DataGrid, ficarei imensamente grato. Obrigado.

 

Estou utilizando C#

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Ving, eu tenho um exemplo sim agora a implementação vai depender de como voce pretende fazer porque eu uso class na maioria das vezes.

 

o script vem abaixo justamente para um sistema de pedidos on line.

 

bom a janela da esquerda fornece um link para voltar para home que usa outra masterpage e logo abaixo do link

um dataset com os produtos onde o codigo de produto é link para inclusão.

 

A janela do meio, tem tres textbox sendo um para nº de ordem de compra do distribuidor, outro ele digita diretamente o codigo do produto e o terceiro ele informa a quantidade e o botão Incluir:

 

Assim que incluir algum item por post ou querystring (vindo da janela de seleção) o sistema verifica se já existe um pedido em andamento e caso contrário ele cria um pedido na tabela e guarda o numero numa session que é manipulada no code-behind.

 

No caso aqui eu uso um class que acessa uma stored procedure para a inclusão mas voce pode fazer diferente é claro.

 

abaixo a página pedidos.aspx - claro que a formatação vem da masterpage2 que não acho necessário publicá-la.

<%@ Page Language="C#" MasterPageFile="~/MasterPage2.master" AutoEventWireup="true" CodeFile="Pedidos.aspx.cs" Inherits="Pedidos" Title="Untitled Page" %>

 

<asp:Content ID="Content1" ContentPlaceHolderID="Navigate" Runat="Server">

<table cellpadding="0" cellspacing="0" border="0" width="760">

<tr>

<td style="width:250px; height:300px; border-right:dotted 2px silver">

<fieldset>

<div class="mtd" style="text-align:left; width:100%">

<img src="Images/Undo.png" align="absmiddle"/><a href="Default.aspx">Voltar Menu Principal</a>

</div>

<legend class="legenda">Lista de Produtos</legend>

<table border="0" cellpadding="0" cellspacing="1" width="100%">

<tr>

<td align="right">Busca: </td>

<td><asp:TextBox ID="formAdd_search" width="120px" runat="server"/></td>

<td align="center">

<asp:Button ID="btnSearch" CssClass="btnOk" width="80px" Text="Buscar" runat="server" />

</td>

</tr>

<tr>

<td colspan="3">

<i>Para selecionar todos, pressione botão Buscar com a caixa vazia</i>

</td>

</tr>

<tr>

<td colspan="5">

<asp:Label ID="Label2" CssClass="legenda" style="color:#ff0000" Text="" runat="server"/>

</td>

</tr>

</table>

<asp:GridView ID="grdProdutos"

DataKeyNames="cod_prod"

AutoGenerateColumns="False"

GridLines="None"

CssClass="grid"

width="250px"

Style="background-color: #6699cc; font-weight: bolder; color: white"

runat="server"

OnPageIndexChanging="grdProdutos_PageIndexChanging"

PageSize="20" AllowPaging="True">

<Columns>

<asp:HyperLinkField DataTextField="cod_prod" DataNavigateUrlFields="cod_prod" HeaderText="Código"

DataNavigateUrlFormatString="~/Pedidos.aspx?numcat={0}">

<ItemStyle Font-Size="7pt" HorizontalAlign="Center" />

<HeaderStyle HorizontalAlign="Center" />

</asp:HyperLinkField>

 

<asp:BoundField DataField="desc_prod" HeaderText="Descrição">

<ItemStyle Font-Size="7pt" HorizontalAlign="Left"/>

<HeaderStyle HorizontalAlign="Center" />

</asp:BoundField>

</Columns>

</asp:GridView>

</fieldset>

</td>

<td style="padding: 4px 4px; width:100%" valign="top">

<table border="0" cellpadding="0" cellspacing="1" width="100%">

<tr>

<td colspan="7" align="left" bgcolor="#cccccc">

<ul style="margin-bottom:0">

<li style="font-size:8pt">Os campos são auto-explicativos. Coloque o cursor do mouse

sobre o campo<br />(sem clicar) e aguarde alguns segundos para obter ajuda.</span></li>

<li style="font-size:8pt">Preencha os campos S/OC e Obs. junto com o primeiro ítem pois o sistema

não permite envio com os campos Código e Quant. em branco.</li>

<li style="font-size:8pt">Ao clicar em algum código na janela produtos, o item é automaticamente

inserido no pedido com 1 quantidade e você pode alterar a quantidade, alterando-a no campo

quantidade e pressionando o botão "Incluir".</li>

<li>O Botão "Finalizar" só aparece após o total do pedido atingir o valor mínimo.</li>

</ul>

</td>

</tr>

<tr bgcolor="#efefef">

<td align="center" height="20px">Data: </td>

<td><asp:Label ID="lbData" runat="server" /></td>

<td>Ped. Nr.:</td>

<td><asp:Label ID="lbIdPedido" runat="server" /></td>

<td colspan="3">

<span style="font-size:8pt; font-weight:bold">

Preencha os campos S/OC, Código,<br />Quant. e Obs. no final da página</span></td>

</tr>

<tr bgcolor="#efefef">

<td align="center">S/OC:</td>

<td>

<asp:TextBox ID="formAdd_oc" width="40" runat="server" MaxLength="10" Text='<%# Bind("oc") %>'/>

</td>

<td align="center">Código:</td>

<td>

<asp:TextBox ID="formAdd_numcat" CssClass="required" width="35" runat="server" MaxLength="5" Text='<%# Bind("cod_prod") %>'/>

</td>

<td align="center">Quant.:</td>

<td>

<asp:TextBox ID="formAdd_quant" CssClass="required" width="35" runat="server" MaxLength="5" Text='<%# Bind("quant") %>'/>

</td>

<td align="center">

<asp:Button ID="btnSend" CssClass="btnOk"

Text="Incluir" CommandName="Insert" runat="server"

CausesValidation="true" ValidationGroup="Add" OnClick="SendIt"/>

</td>

</tr>

<tr>

<td colspan="7">

<asp:GridView ID="GrdPedidoItens"

DataSourceID="srcEditPedido"

DataKeyNames="numreg"

AutoGenerateColumns="False"

GridLines="None"

CssClass="grid"

width="480"

Style="background-color: #6699cc; font-weight: bolder; color: white"

runat="server" ShowFooter="true"

OnRowDataBound="grdPedidoItens_RowDataBound">

<Columns>

<asp:BoundField DataField="numcat" HeaderText="Código" ReadOnly="true"/>

<asp:BoundField DataField="descricao" HeaderText="Descrição" ItemStyle-HorizontalAlign="Left" ReadOnly="true"/>

<asp:BoundField DataField="modelo" HeaderText="Mod." ReadOnly="true"/>

<asp:BoundField DataField="quant" HeaderText="Quant" ItemStyle-HorizontalAlign="Center" ReadOnly="true"/>

<asp:BoundField DataField="preco" HeaderText="Preço" ItemStyle-HorizontalAlign="Right" ControlStyle-CssClass="edValores"/>

<asp:BoundField DataField="total" HeaderText="Total R$" ItemStyle-HorizontalAlign="Right" ReadOnly="true"/>

<asp:TemplateField>

<ItemTemplate>

<asp:LinkButton ID="btnDel" Text="<img src='Images/delete.png' border='0'>" CommandName="Delete" runat="server"

OnClientClick="return confirm('Você tem certeza ?');" Visible="true"/>

</ItemTemplate>

</asp:TemplateField>

</Columns>

 

<FooterStyle BackColor="#60c660" ForeColor="white" HorizontalAlign="Center" Wrap="false"/>

<RowStyle BackColor="#D9F4D8" ForeColor="Black" />

<SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />

<PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />

<HeaderStyle BackColor="#006666" Font-Bold="True" ForeColor="#F7F7F7" />

<AlternatingRowStyle BackColor="White" />

</asp:GridView>

</td>

</tr>

<tr>

<td colspan="7">Obs.:

<asp:TextBox ID="formAdd_obs" width="400" runat="server" MaxLength="255" Text='<%# Bind("obs") %>'/>

</td>

</tr>

<tr>

<td colspan="7">

<asp:Panel ID="sndMail" runat="server" Visible="false">

Clique <asp:ImageButton ID="btnSendEmail" runat="server" ImageAlign="AbsMiddle" ImageUrl="Images/email.gif" OnClick="sendmail"/>

para Finalizar e enviar seu Pedido

</asp:Panel>

</tr>

<tr>

<td colspan="7">

<asp:Label ID="msgLine" CssClass="legenda" style="color:#ff0000" Text="" runat="server"/>

</td>

</tr>

</table>

<asp:ObjectDataSource ID="srcEditPedido" TypeName="Ridgid.Pedidos" SelectMethod="SelectItens"

UpdateMethod="Update" runat="server" DeleteMethod="Delete" OnDeleted="grdPedidoItens_Deleted">

 

<SelectParameters>

<asp:SessionParameter Name="idPedido" SessionField="pedId" Type="Int32" />

</SelectParameters>

</asp:ObjectDataSource>

</td>

</tr>

</table>

</asp:Content>

a seguir o code-behind da pagina acima:

O codigo abaixo tem vários comentários principalmente nas seções mais críticas.

O script também grava um cookie e somente o remove após a finalização do pedido. Este cookie tem validade por 7 dias

e uma vez finalizado, é disparado um email para a empresa com copia para o distribuidor.

Foi utilizado o class FreeSMTP e eu criei um class em C# com o metodo sendEmail que recebe os parametros de qualquer pagina

para disparo do email.

 

using System;

using System.Data;

using System.Data.OleDb;

using System.Data.SqlClient;

using System.IO;

using System.Configuration;

using System.Collections;

using System.Collections.Generic;

using System.Web;

using System.Web.Configuration;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Text.RegularExpressions;

 

public partial class Pedidos : System.Web.UI.Page

{

 

private double _valorTotal = 0; // para totalizar o grid

private int _quantTotal = 0; // para totalizar o grid

 

protected void Page_Load(object sender, EventArgs e)

{

if (Session["dstId"] == null)

Response.Redirect("Login.aspx?backTo=Pedidos");

 

if (!IsPostBack)

{

lbData.Text = String.Format("{0:dd/MM/yyyy}", DateTime.Now);

lbIdPedido.Text = "";

TextBox _oc = formAdd_oc;

_oc.Attributes.Add("Title", "Este campo é atualizado a cada insert/exclusão de registros, " +

"portanto prevalecerá o valor no momento da finalização do pedido!");

_oc.Text = "";

 

TextBox _obs = formAdd_obs;

_obs.Attributes.Add("Title", "Este campo é atualizado a cada insert/exclusão de registros, " +

"portanto prevalecerá o valor no momento da finalização do pedido!");

_obs.Text = "";

 

TextBox _numcat = formAdd_numcat;

_numcat.Attributes.Add("onkeypress", "return formataNumero(event,'ctl00_Navigate_formAdd_numcat');");

_numcat.Attributes.Add("Title", "Campo numérico com o máximo de 5 dígitos!");

 

TextBox _quant = formAdd_quant;

_quant.Attributes.Add("onkeypress", "return formataNumero(event,'ctl00_Navigate_formAdd_quant');");

_quant.Attributes.Add("Title", "Campo numérico com o máximo de 4 dígitos!" +

" Para alterar a quantidade de um ítem já cadastrado, digite o código "+

" novamente com a nova quantidade e clique no botão Incluir que o sistema irá "+

" detecta o codigo e somente atualiza quantidade e o total do pedido");

 

Button toSend = btnSend;

toSend.Attributes.Add("onClick", "return checkForm('aspnetForm');");

toSend.Attributes.Add("Title", "Botão para incluir itens no seu pedido!");

 

if (Request.QueryString["numcat"] != null)

{

// o numcat veio do click do grid de seleção

_numcat.Text = Request.QueryString["numcat"].ToString();

_quant.Text = "1";

SendIt(sender, e); // chama o metodo para inclusao do item no grid

}

}

else

{

 

TextBox _search = formAdd_search;

Session["searchText"] = _search.Text;

msgLine.Text = "";

}

 

if (Session["pedId"] == null)

{

HttpCookie rCookie = Request.Cookies["Ridgid/POL"];

if (rCookie != null && rCookie.Value != "")

if (Convert.ToUInt32(rCookie.Value.ToString()) > 0)

{

Session["pedId"] = Convert.ToUInt32(rCookie.Value.ToString());

}

}

 

loadGrid();

 

if (Session["pedId"] != null)

{

_valorTotal = 0;

_quantTotal = 0;

GrdPedidoItens.DataBind();

 

SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["RidgidString"].ConnectionString);

SqlCommand cmd = new SqlCommand("SELECT dataped, oc, obs FROM Pedidos WHERE pid=" + Session["pedId"].ToString(), con);

cmd.CommandType = CommandType.Text;

 

using (con)

{

con.Open();

SqlDataReader reader = cmd.ExecuteReader();

reader.Read();

// preenche dados fixos

lbData.Text = String.Format("{0:dd/MM/yyyy}", reader["dataped"]);

lbIdPedido.Text = Session["pedId"].ToString().PadLeft(6, '0');

 

// dados que podem ser alterados

TextBox _oc = formAdd_oc;

if (_oc.Text == "") _oc.Text = (string)reader["oc"];

TextBox _obs = formAdd_obs;

if (_obs.Text=="") _obs.Text=(string)reader["obs"];

}

}

}

 

 

 

 

 

protected void loadGrid()

{

DataSet ds = new DataSet();

string strConn = WebConfigurationManager.ConnectionStrings["RidgidMDBString"].ConnectionString;

OleDbConnection cn = new OleDbConnection(strConn);

 

string strSQL;

 

if (Session["searchText"] == null)

strSQL = "SELECT cod_prod, desc_prod FROM estoque_web order by desc_prod";

else

strSQL = "SELECT cod_prod, desc_prod FROM estoque_web where desc_prod like '%" + Session["searchText"].ToString() + "%' OR referencia like '%" + Session["searchText"].ToString() + "%' order by desc_prod";

 

cn.Open();

 

OleDbDataAdapter da = new OleDbDataAdapter(strSQL, cn);

ds.Tables.Add("estoque_web");

ds.EnforceConstraints = false;

 

ds.Tables["estoque_web"].BeginLoadData();

da.Fill(ds.Tables["estoque_web"]);

ds.Tables["estoque_web"].EndLoadData();

 

grdProdutos.DataSource = ds.Tables["estoque_web"];

cn.Close();

grdProdutos.DataBind();

}

 

 

protected void grdProdutos_PageIndexChanging(object sender, GridViewPageEventArgs e)

{

grdProdutos.PageIndex = e.NewPageIndex;

grdProdutos.DataBind();

}

 

 

protected void grdPedidoItens_RowDataBound(object sender, GridViewRowEventArgs e)

{

sndMail.Visible = false;

if (e.Row.RowType == DataControlRowType.DataRow)

{

this._valorTotal += Convert.ToDouble(e.Row.Cells[5].Text);

this._quantTotal += Convert.ToInt32(e.Row.Cells[3].Text);

}

else if (e.Row.RowType == DataControlRowType.Footer)

{

e.Row.Cells[2].Text = "<div style='float:right'>Ítens: </div>";

e.Row.Cells[3].Text = "<b style='color:red'>" + this._quantTotal.ToString().PadLeft(4, '0') + "</b>";

e.Row.Cells[4].Text = "<div style='float:right'>Total: </div>";

e.Row.Cells[5].Text = "<div style='float:right'><b style='color:red'>" + this._valorTotal.ToString("F") + "</b></div>";

}

if (_valorTotal >= Convert.ToDouble(Session["minimo"].ToString()))

sndMail.Visible = true;

}

 

 

protected void grdPedidoItens_Deleted(object sender, ObjectDataSourceStatusEventArgs e)

{

_valorTotal = 0;

_quantTotal = 0;

}

 

 

protected void sendmail(object sender, EventArgs e)

{

if (Session["pedId"] == null) return;

string eBody;

 

TextBox _oc = formAdd_oc;

eBody = "<table border=0 cellpadding=0 cellspacing=2 width='100%'>" +

" <tr>" +

" <td class=label>Pedido Nr.:</td>" +

" <td class=value>" + String.Format("{0:D6}", Session["pedId"].ToString()) + " - S/OC:"+ _oc.Text +

" </td><td class=label>Data:</td>" +

" <td class=value>" + String.Format("{0:dd/MM/yyyy}", DateTime.Now) + "</td>" +

" </tr>" +

" <tr>" +

" <td class=label>Distrib.:</td>" +

" <td class=value colspan='3'>" + Session["dstName"].ToString() + "</td>" +

" </tr>";

 

eBody += "<tr>" +

" <td class=label>E-mail:</td>" +

" <td class=value colspan='3'>" + Session["dstEmail"].ToString() +

"<tr><td class=label>Fone:</td>" +

" <td class=value>" + Session["dstFone"].ToString() + "</td>" +

" <td class=label>Contato:</td>" +

" <td class=value>" + Session["contato"].ToString() + "</td>" +

"</tr>" +

"</table>";

// até aqui ta ok agora a parte de itens

eBody += "<table border=0 cellpadding=0 cellspacing=2 width='100%'>" +

"<tr align=center bgcolor=red><td><b>Código</b></td><td><b>Descrição</b></td><td><b>Mod.</b></td><td><b>Quant.</b></td><td><b>Vr. Unit.</b></td><td><b>Total</b></td></tr>";

 

double totalGeral = 0;

string itens = "";

foreach (GridViewRow row in GrdPedidoItens.Rows)

{

totalGeral += Convert.ToDouble(row.Cells[5].Text);

eBody += "<tr><td align=center>" + row.Cells[0].Text +

"</td><td>" + row.Cells[1].Text +

"</td><td align=center>" + row.Cells[2].Text +

"</td><td align=right>" + row.Cells[3].Text +

"</td><td align=right>" + row.Cells[4].Text +

"</td><td align=right>" + row.Cells[5].Text + "</tr>";

 

string unitario = row.Cells[4].Text.Replace(",", "");

string total = row.Cells[5].Text.Replace(",", "");

 

// grava no arquivo log

itens += row.Cells[0].Text.PadLeft(5, '0') +

row.Cells[1].Text.PadRight(40, ' ') +

row.Cells[2].Text.Replace(""","''").PadRight(15, ' ') +

row.Cells[3].Text +

unitario.PadLeft(10, '0') +

total.PadLeft(10, '0');

}

 

TextBox _obs = formAdd_obs;

eBody += "<tr bgcolor=red><td class=label colspan=5>Total Geral</td>" +

"<td class=value align=right>" + String.Format("{0:C}", totalGeral) + "</td>" +

"<tr><td colspan=6>Obs.: "+ _obs.Text + "</tr>"+

"<tr><td colspan=6 align=center>Os preços foram calculados com seu desconto padrão, "+

"s/impostos e descontos adicionais.<br />"+

"<b>Valor mínimo para frete CIF R$ 600,00</b><br/><br/>"+

"<b>Prezado Distribuidor: </b>"+

"Seu pedido foi enviado e está sujeito à confirmação de estoque e crédito.<br>"+

"Aguarde confirmação do nosso Depto. de Vendas.</tr></table>";

 

 

//string check = "Email enviado com sucesso";

//string sended = "Erro";

 

// envia o email para Silvia com copia para distribuidor

string sended = Ridgid.SendEmail.Sender(Session["dstName"].ToString(), Session["dstEmail"].ToString(), "vendas@empresatal.com.br", "Canal Distribuidores - Pedidos OnLine", eBody, true); // a flag true informa ao metodo que ele deve enviar copia ao remetente também.

 

string check = sended.Substring(0, 25);

 

if (check == "Email enviado com sucesso")

{

msgLine.Text = "<b style='color:green'>Email enviado com sucesso !</b>"; // imprime enviado com sucesso

Ridgid.Pedidos.Finaliza(Convert.ToInt32(Session["pedId"].ToString()));

 

HttpCookieCollection cookieCols = new HttpCookieCollection();

cookieCols = Request.Cookies;

Response.Cookies["Ridgid/POL"].Value = null;

Request.Cookies.Remove("Ridgid/POL");

sndMail.Visible = false;

formAdd_obs.Text="";

formAdd_oc.Text = "";

formAdd_numcat.Text = "";

formAdd_quant.Text = "";

Session.Remove("pedId");

lbIdPedido.Text = "";

}

else

{

msgLine.Text = "E-mail não foi enviado:<br/>O erro retornado foi:" + sended.ToString(); // imprime o erro retornado do sender

}

}

 

protected void SendIt(object sender, EventArgs e)

{

int _numcat;

try

{

_numcat = Convert.ToInt32(formAdd_numcat.Text);

}

catch (Exception)

{

msgLine.Text = "Número de Catálogo inválido. digite somente números neste campo!";

return;

}

 

int _quant;

try

{

_quant = Convert.ToInt32(formAdd_quant.Text);

}

catch (Exception)

{

msgLine.Text = "Quantidade inválida. digite somente números neste campo!";

return;

}

 

int ret; // retorno do class que indica se gravou ou nao

int idDistrib = Convert.ToInt32(Session["dstId"].ToString());

int idPedido = (Session["pedId"] != null) ? Convert.ToInt32(Session["pedId"].ToString()) : 0;

string _oCompra = formAdd_oc.Text;

string _observ = formAdd_obs.Text;

 

// int idPedido, int idDistrib, string oc, string obs, int numcat, int quant

ret = Ridgid.Pedidos.Insert(idPedido, idDistrib, _oCompra, _observ, _numcat, _quant);

if (ret == -503)

msgLine.Text = "Erro 503: Número de Catálogo inválido !!!";

else if (ret == -502)

msgLine.Text = "Erro 502: Erro de atualização na tabela pedido_itens !!!";

else if (ret == -501)

msgLine.Text = "Erro 501: Erro de inclusão na tabela pedido_itens !!!";

else if (ret == -500)

msgLine.Text = "Erro 500: Erro de inclusão na tabela pedidos !!!";

else if (ret ==0)

msgLine.Text = "Erro Indefinido !!!";

else

{

if (idPedido == 0)

{

Session["pedId"] = ret;

HttpCookie cookie = new HttpCookie ("Ridgid/POL"); // cria o cookie

cookie.Value = ret.ToString(); //Define o valor do cookie

DateTime dtNow = DateTime.Now; // pega a data atual

TimeSpan tsTime = new TimeSpan(7,0,0,0); // expira em 7 dias

cookie.Expires = dtNow + tsTime;

Response.Cookies.Add(cookie); //Adiciona o cookie

lbIdPedido.Text = ret.ToString();

}

_valorTotal = 0;

_quantTotal = 0;

GrdPedidoItens.DataBind();

}

}

}

O class do App_Code

 

using System;

using System.IO;

using System.Data;

using System.Data.SqlClient;

using System.Web.Configuration;

using System.Collections.Generic;

using System.Web;

 

namespace Ridgid

{

 

///<summary>

///Represents a cidade and methods for

///working with cidades

///</summary>

[system.ComponentModel.DataObject]

public class Pedidos

{

private static readonly string _connectionString;

 

/// <summary>

/// Retrieve bairrobase connection string from Web configuration

/// </summary>

static Pedidos()

{

_connectionString = WebConfigurationManager.ConnectionStrings["RidgidString"].ConnectionString;

}

 

private string _idPedido;

public string idPedido

{

get { return _idPedido; }

set { _idPedido = value; }

}

 

private int _idDistrib;

public int idDistrib

{

get { return _idDistrib; }

set { _idDistrib = value; }

}

 

 

private int _idUsuario;

public int idUsuario

{

get { return _idUsuario; }

set { _idUsuario = value; }

}

 

private string _empresa;

public string empresa

{

get { return _empresa; }

set { _empresa = value; }

}

 

private string _cnpj;

public string cnpj

{

get { return _cnpj; }

set { _cnpj = value; }

}

 

private string _data;

public string data

{

get { return _data; }

set { _data = value; }

}

 

private string _oc;

public string oc

{

get { return _oc; }

set { _oc = value; }

}

 

private string _total;

public string total

{

get { return _total; }

set { _total = value; }

}

 

private string _obs;

public string obs

{

get { return _obs; }

set { _obs = value; }

}

 

private int _status;

public int status

{

get { return _status; }

set { _status = value; }

}

 

 

// itens

private int _numreg;

public int numreg

{

get { return _numreg; }

set { _numreg = value; }

}

private int _numcat;

public int numcat

{

get { return _numcat; }

set { _numcat = value; }

}

private string _modelo;

public string modelo

{

get { return _modelo; }

set { _modelo = value; }

}

private string _descricao;

public string descricao

{

get { return _descricao; }

set { _descricao = value; }

}

private string _quant;

public string quant

{

get { return _quant; }

set { _quant = value; }

}

private string _preco;

public string preco

{

get { return _preco; }

set { _preco = value; }

}

private string _cat;

public string cat

{

get { return _cat; }

set { _cat = value; }

}

 

#region Methods

 

/// <summary>

/// Initializes a cidade from a bairroReader

/// </summary>

/// <param name="reader"></param>

public Pedidos(SqlDataReader reader, int idDst)

{

_idPedido = String.Format("{0:D6}", reader["pid"]);

_total = String.Format("{0:F}", reader["total"]);

if (idDst > 0)

{

// recupera os dados do header do pedido

_data = String.Format("{0:dd/MM/yyyy}", reader["dataped"]); ;

_idDistrib = (int)reader["did"];

_idUsuario = (int)reader["uid"];

_oc = (reader["oc"] != DBNull.Value) ? (string)reader["oc"] : null;

_obs = (reader["obs"] != DBNull.Value) ? (string)reader["obs"] : null;

_empresa = (reader["empresa"] != DBNull.Value) ? (string)reader["empresa"] : null;

_cnpj = (reader["cnpj"] != DBNull.Value) ? (string)reader["cnpj"] : null;

_status = (int)reader["status"];

}

else

{

 

// recupera os itens do pedido

_numreg = (int)reader["numreg"];

_numcat = (int)reader["numcat"];

_modelo = (reader["modelo"] != DBNull.Value) ? (string)reader["modelo"] : null;

_descricao = (string)reader["descricao"];

_quant = String.Format("{0:D4}", reader["quantidade"]);

_preco = String.Format("{0:F}", reader["preco"]);

_cat = (reader["categoria"] != DBNull.Value) ? (string)reader["categoria"] : null;

}

}

 

 

 

 

/// <summary>

/// Cria um novo pedido se necessario e Insere um item na tabela Pedido_Itens

/// </summary>

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Update, false)]

public static int Insert(int idPedido, int idDistrib, string oc, string obs, int numcat, int quant)

{

if (obs == null) obs = "";

 

// Initialize command

SqlConnection con = new SqlConnection(_connectionString);

SqlCommand cmd = new SqlCommand("Pedidos_Insert", con);

cmd.CommandType = CommandType.StoredProcedure;

 

cmd.Parameters.AddWithValue("@idPedido", idPedido);

cmd.Parameters.AddWithValue("@idDistrib", idDistrib);

cmd.Parameters.AddWithValue("@idUsuario", 0);

cmd.Parameters.AddWithValue("@oc", oc);

cmd.Parameters.AddWithValue("@obs", obs);

 

cmd.Parameters.AddWithValue("@numcat", numcat);

cmd.Parameters.AddWithValue("@quant", quant);

 

int ret=0;

cmd.Parameters.AddWithValue("@ret", ret);

cmd.Parameters["@ret"].Direction = ParameterDirection.Output;

using (con)

{

con.Open();

cmd.ExecuteNonQuery();

ret = Convert.ToInt32(cmd.Parameters["@ret"].Value.ToString());

}

return ret;

}

 

 

 

/// <summary>

/// Atualiza um item na tabela pedido_itens

/// </summary>

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Update, false)]

public static void Update(int numreg, int quant)

{

int _quant;

try

{

_quant = Convert.ToInt32(quant);

}

catch (Exception)

{

return;

}

 

// Initialize command

SqlConnection con = new SqlConnection(_connectionString);

SqlCommand cmd = new SqlCommand("PedidoItens_Update", con);

cmd.CommandType = CommandType.StoredProcedure;

 

cmd.Parameters.AddWithValue("@numreg", numreg);

cmd.Parameters.AddWithValue("@quant", _quant);

cmd.Parameters.Add("@ret", SqlDbType.Int).Value = 0;

cmd.Parameters["@ret"].Direction = ParameterDirection.Output;

using (con)

{

con.Open();

cmd.ExecuteNonQuery();

int ret = Convert.ToInt32(cmd.Parameters["@ret"].Value.ToString());

}

// return (ret);

}

 

 

 

/// <summary>

/// Atualiza um item na tabela pedido_itens

/// </summary>

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Update, false)]

public static void Delete(int numreg)

{

 

// Initialize command

SqlConnection con = new SqlConnection(_connectionString);

SqlCommand cmd = new SqlCommand("Pedidos_Delete", con);

cmd.CommandType = CommandType.StoredProcedure;

 

cmd.Parameters.AddWithValue("@numreg", numreg);

using (con)

{

con.Open();

cmd.ExecuteNonQuery();

}

}

 

 

/// <summary>

/// Seleciona todos os pedidos do distribuidor

/// </summary>

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Select, false)]

public static List<Pedidos> Select(int idDst)

{

// Initialize command

string sql;

sql = "SELECT p.*, d.empresa, d.cnpj FROM " +

"(pedidos AS p INNER JOIN distribuidores AS d " +

"ON p.did=d.did) WHERE p.status > 0 ";

if (idDst > 0)

sql += " AND p.did=" + idDst;

 

sql += " ORDER BY pid DESC";

 

SqlConnection con = new SqlConnection(_connectionString);

SqlCommand cmd = new SqlCommand(sql, con);

cmd.CommandType = CommandType.Text;

 

List<Pedidos> results = new List<Pedidos>();

using (con)

{

con.Open();

SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())

results.Add(new Pedidos(reader, idDst));

}

return results;

}

 

 

/// <summary>

/// Seleciona um pedido

/// </summary>

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Delete, true)]

public static Pedidos SelectById(int idPedido)

{

// Initialize command

SqlConnection con = new SqlConnection(_connectionString);

string sql;

sql = "SELECT p.*, d.empresa, d.cnpj FROM "+

"(pedidos AS p INNER JOIN distribuidores AS d "+

"ON p.did=d.did) WHERE p.status > 0 AND pid=" + idPedido;

SqlCommand cmd = new SqlCommand(sql, con);

cmd.CommandType = CommandType.Text;

 

Pedidos result = null;

using (con)

{

con.Open();

SqlDataReader reader = cmd.ExecuteReader();

if (reader.Read())

result = new Pedidos(reader, 1);

}

return result;

}

 

 

/// <summary>

/// Seleciona Itens do pedido

/// </summary>

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Delete, true)]

public static List<Pedidos> SelectItens(int idPedido)

{

// Initialize command

SqlConnection con = new SqlConnection(_connectionString);

SqlCommand cmd = new SqlCommand("SELECT * FROM pedido_itens WHERE pid=" + idPedido, con);

cmd.CommandType = CommandType.Text;

 

List<Pedidos> results = new List<Pedidos>();

using (con)

{

con.Open();

SqlDataReader reader = cmd.ExecuteReader();

 

while (reader.Read())

results.Add(new Pedidos(reader, 0));

}

return results;

}

 

 

/// <summary>

/// Atualiza campo obs na tabela pedidos

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Update, true)]

public static void Update(int idPedido, string obs)

{

// Initialize command

string sql = "UPDATE Pedidos SET obs='"+ obs +"' WHERE pid=" + idPedido;

SqlConnection con = new SqlConnection(_connectionString);

SqlCommand cmd = new SqlCommand(sql, con);

cmd.CommandType = CommandType.Text;

 

using (con)

{

con.Open();

cmd.ExecuteNonQuery();

}

}

 

/// <summary>

/// Finaliza o pedido

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Update, true)]

public static void Finaliza(int idPedido)

{

// Initialize command

string sql = "UPDATE Pedidos SET status=1 WHERE pid=" + idPedido;

SqlConnection con = new SqlConnection(_connectionString);

SqlCommand cmd = new SqlCommand(sql, con);

cmd.CommandType = CommandType.Text;

using (con)

{

con.Open();

cmd.ExecuteNonQuery();

}

}

 

 

#endregion

}

}

 

finalmente as storeds para o sql server ou outro server

 

ALTER PROCEDURE Pedidos_Insert

(

@idPedido int,

@idDistrib int,

@idUsuario int,

@oc nvarchar(10),

@obs nvarchar(255),

@numcat int,

@quant int,

@ret int output

)

 

AS

 

DECLARE @modelo nVarchar(30)

DECLARE @descricao nVarchar(100)

DECLARE @precoTb decimal(10,2)

DECLARE @preco decimal(10,2)

DECLARE @total decimal(10,2)

DECLARE @cat char

DECLARE @numreg int

 

DECLARE @descA float

DECLARE @descB float

DECLARE @descC float

DECLARE @descD float

DECLARE @desc float

 

DECLARE @AlIpi decimal(4,2)

DECLARE @ipi decimal(10,2)

DECLARE @strPreco nvarchar(30)

 

 

if (@idDistrib > 0)

BEGIN

SELECT @modelo=p.modelo, @descricao=p.descricao, @cat=p.categoria, @precoTb=p.preco, @alIpi=p.ipi,

@descA=d.desc_a, @descB=d.desc_b, @descC=d.desc_c, @descD=d.desc_d

FROM produtos AS p CROSS JOIN

distribuidores AS d

WHERE (p.numCat = @numcat) AND (d.did = @idDistrib)

 

--print 'rows:'+str(@@ROWCOUNT)

 

if (@@ROWCOUNT = 0)

BEGIN

--print 'entrei'

SET @ret=-503

RETURN(@ret)

END

 

 

IF (@cat='A') SET @desc=@descA

ELSE IF (@cat='B') SET @desc=@descB

ELSE IF (@cat='C') SET @desc=@descC

ELSE SET @desc=@descD

 

SET @preco=(@precoTb - ((@desc / 100) * @precoTb)) * 1.03

-- SET @ipi = @preco * @alIpi / 100

-- SET @preco = (@preco + @ipi) * 1.03

END

ELSE

BEGIN

SELECT @modelo=modelo, @descricao=descricao, @cat=categoria, @precoTb=preco, @alIpi=ipi

FROM produtos WHERE (numCat = @numcat)

 

--print 'rows:'+str(@@ROWCOUNT)

 

if (@@ROWCOUNT = 0)

BEGIN

--print 'entrei'

SET @ret=-503

RETURN(@ret)

END

-- (preco*0.4092*0.93*1.03*1.07)

SET @preco=(@precoTb * 0.4092*0.93*1.03*1.10)

print 'preco='+str(@preco)

END

 

SET @total=@preco * @quant

 

--preco = formatnumber((preco - ((session("desc_"&cat) / 100) * preco) * 1.03), 2)

--print 'preco='+str(@preco)

 

BEGIN

BEGIN TRANSACTION

 

IF @idPedido=0

BEGIN

INSERT INTO pedidos(did, uid, oc, obs) VALUES(@idDistrib,@idUsuario, @oc, @obs)

SELECT @idPedido=@@Identity

END

 

--print 'idPedido'+STR(@idPedido)

 

if exists(SELECT numcat FROM pedido_itens WHERE pid=@idPedido AND numcat=@numcat)

BEGIN

IF (@quant > 0)

UPDATE pedido_itens SET quantidade=@quant, preco=@preco, total=@total

WHERE (pid=@idPedido) AND (numcat=@numcat)

ELSE

DELETE FROM pedido_itens WHERE (pid=@idPedido) AND (numcat=@numcat)

--print 'entre no update'

END

ELSE IF (@quant > 0)

BEGIN

INSERT INTO pedido_itens(pid, numcat, modelo, descricao, quantidade, preco, total, categoria)

VALUES(@idPedido, @numcat, @modelo, @descricao, @quant, @preco, @total, @cat)

--print 'entre no insert'

END

 

 

 

--PRINT 'erro='+str(@@error)

--print 'passei pelo insert itens numreg='+str(@numreg)

 

UPDATE pedidos SET oc=@oc, obs=@obs, total=(SELECT SUM(total) FROM pedido_itens WHERE pid=@idPedido) WHERE pid=@idPedido

 

 

 

--print 'select header'

--select * from pedidos where pid=@idPedido

 

--print 'select itens do pedido'

--SELECT * from pedido_itens where pid=@idPedido

END

 

IF @@error <> 0

BEGIN

SET @ret=-501

ROLLBACK TRANSACTION

END

ELSE

BEGIN

SET @ret=@idPedido;

COMMIT TRANSACTION

END

 

RETURN(@ret)

 

-- retorna o id do pedido se foi um pedido novo ou atualizado ou o codigo do erro < 0

 

 

 

-- procedure para excluir um item, deve atualizar o header do pedido:

ALTER PROCEDURE Pedidos_Delete

(

@numreg int

)

 

AS

 

DECLARE @idPedido int

 

SELECT @idPedido=pid

FROM pedido_itens

WHERE (numreg = @numreg)

 

DELETE FROM pedido_itens WHERE numreg=@numreg

 

UPDATE pedidos SET total=(SELECT SUM(total) FROM pedido_itens WHERE pid=@idPedido) WHERE pid=@idPedido

 

 

 

-- quando o usuario alterar a quantidade de algum item

-- caso a quantidade seja "0" ele excluir o item.

 

ALTER PROCEDURE PedidoItens_Update

(

@numreg int,

@quant int,

@ret int output

)

 

AS

DECLARE @idPedido int

 

 

SELECT @idPedido=pid FROM pedido_itens WHERE numreg=@numreg

 

BEGIN

BEGIN TRANSACTION

UPDATE pedido_itens SET quantidade=@quant, total=(preco * @quant) WHERE numreg=@numreg

 

UPDATE pedidos SET total=(SELECT SUM(total) FROM pedido_itens WHERE pid=@idPedido) WHERE pid=@idPedido

END

 

IF @@error <> 0

BEGIN

SET @ret=-1

ROLLBACK TRANSACTION

END

ELSE

BEGIN

SET @ret=1;

COMMIT TRANSACTION

END

 

RETURN(@ret)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, agradeço imensamente sua resposta, no entanto ela está muito complexa para a solução do meu problema, vou tentar re-explica o que eu estou precisando com um exemplo:

 

Imagine que você tem um Form com 1 textBox chamado txtNome , uma DataGrid Chama dvgRecebeNome e um botão chamado btnInserir, (claro que meu programa é muito mais complexo que isso), minha intenção é que no momento em que se clicar no botão, o que estiver escrito no Text, seja copiado para a Grid, e a cada vez que se clica ele vá acumulando isso na Grid, essa é a minha dúvida, é isso que não consigo fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai voce teria que gerar um metodo para fazer um add no grid.

Eu nunca fiz isso mas na net tem milhares de exemplos de como inserir um dado em um grid.

 

Pra pegar os dados do form. é so fazer:

TextBox _nomedocampo = (TextBox)SeuForm.FindControl("nomedocampo");
para acessar o valor do campo é acessar _nomedocampo.Text;

 

Para acessar o grid olha no metodo sendEmail que percorre todo o grid,

Provavelmente você vai ter que dar add new la e você acessa as colunas a mesma maneira que eu acesso para capturar os dados.

 

Ve se esse link te ajuda:

 

http://www.linhadecodigo.com.br/ArtigoImpressao.aspx?id=17

Compartilhar este post


Link para o post
Compartilhar em outros sites

Movido Plataforma .NET » Visual Studio .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Web Applications

 

Pesquise sobre DataTable, você irá gravar seus dados em uma DataTable e sua Grid irá ser alimentada por esta DataTable.

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.