alfinete
Power Member
__________________________________________________
ficheiro pedidos.aspx
---------------------------------------------------------
___________________________________________________
ficheiro pedidos.aspx.vb
----------------------------------------------------------
tenho aqui um pequeno problema , como devem ter reparado , tenhos duas comparações:
If stock_prod > 0 , If stock_pendente > 0 , em quea a variavel stock_prod guarda o stock total existente do produto , e stock_pendemte guarda o valor acima do stock em relação ao valor que o utilizador escreve numa caixa de texto.
até ai tdo bem , ambas a variaveis ja descritras guardam o valor certo , comprovado por testes realizados.
o prob é que ao passar pelo primeiro "If stock_prod > 0 " ele guarda o valor certo na tabela, guardando apenas o que esta dentro de stock , e no 2º " If stock_pendente > 0" que devia guardar um reg na tabela com os valores para alem do stock existente não o guarda. não sei pq carga de agua.
notas:
agradecia uma resolução para o probema
ficheiro pedidos.aspx
---------------------------------------------------------
Código:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Pedidos.aspx.vb" Inherits="Pedidos" EnableSessionState="True" %>
<!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>
<!-- Chama o ficheiro do pedidos.css -->
<link rel="STYLESHEET" type="text/css" href="Pedidos.css" />
</head>
<script type="text/javascript">
/*função que so deixa escrever digitos
function CheckContent(evt){
var charCode = (evt.which) ? evt.which : event.keyCode;
return (charCode>=48 && charCode<=57 && charcode=127);
}*/
/*
function isNumber(form, field)
{
var value=form.elements[field].value;
value=parseInt(value);
if (!isNaN(value)){
alert("é um número");
//fazer kker coisa
}
else{
alert("não é um número");
//fazer kker coisa
}*/
</script>
<body class="homeb">
<form id="form1" runat="server">
<div class="titulo">
Pedidos
</div>
<hr class="linha" />
<asp:DropDownList ID="DDL_Tipo_Pedido" runat="server" AutoPostBack="True"
DataSourceID="SqlDataSource_tipo_produtos"
DataTextField="Nome" DataValueField="Id">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource_tipo_produtos" runat="server"
ConnectionString="<%$ ConnectionStrings:RequisicoesConnectionString %>"
SelectCommand="SELECT * FROM [TabProdutoTipo] WHERE ([IdCategoria] IS NULL)">
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSourceProdutos" runat="server"
ConnectionString="<%$ ConnectionStrings:RequisicoesConnectionString %>"
SelectCommand="SELECT * FROM [TabProduto] WHERE ([Idtipo] = @Idtipo)">
<SelectParameters>
<asp:ControlParameter ControlID="DDL_Tipo_Pedido" Name="Idtipo" PropertyName="SelectedValue"
Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
<br />
<br />
<asp:GridView DataKeyNames="Id" ID="GridView_pedidos" runat="server" BackColor="White" BorderColor="#999999"
BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Vertical" HorizontalAlign="Center"
CaptionAlign="Right" OnRowCommand="GridView_pedidos_RowCommand"
DataSourceID="SqlDataSourceProdutos" Visible="False" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False">
<FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
<EmptyDataRowStyle HorizontalAlign="Center" />
<Columns >
<asp:TemplateField HeaderText="Quantidade">
<ItemTemplate>
<asp:HiddenField ID="auxHiddenArgument" runat="server" />
<asp:TextBox ID="Txt_Quantidade" runat="server" Width="79px"></asp:TextBox>
<asp:Button ID="Btn_pedir" runat="server" Font-Bold="True" Font-Size="Small" Text="Pedir"
CommandName="BotaoPedir" CausesValidation="False" UseSubmitBehavior="False"
/>
</ItemTemplate>
<HeaderStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:BoundField DataField="Id" HeaderText="Codigo" ReadOnly="True" SortExpression="Id" />
<asp:BoundField DataField="Idtipo" HeaderText="Codigo Tipo" SortExpression="Idtipo" Visible="False" />
<asp:BoundField DataField="Nome" HeaderText="Nome Produto" SortExpression="Nome" />
<asp:BoundField DataField="Stock" HeaderText="Stock" SortExpression="Stock" />
<asp:BoundField DataField="Descricao" HeaderText="Descrição" SortExpression="Descricao" />
</Columns>
<PagerTemplate>
<asp:TextBox ID="TextBox2" runat="server" Width="82px"></asp:TextBox>
</PagerTemplate>
<RowStyle BackColor="#EEEEEE" ForeColor="Black" />
<EmptyDataTemplate>
<asp:TextBox ID="Txt_quantidade" runat="server" Width="98px"></asp:TextBox>
</EmptyDataTemplate>
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="Gainsboro" />
</asp:GridView>
<asp:Label ID="Lbl_mensagem" runat="server" Font-Bold="True" Font-Size="Medium" Visible="False"></asp:Label><br />
<br />
<asp:Label ID="Label2" runat="server" Font-Bold="True" Font-Size="Medium" Visible="False"></asp:Label><br />
<br />
<asp:Label ID="Label3" runat="server" Font-Bold="True" Font-Size="Medium" Visible="False"></asp:Label><br />
<br />
<asp:Label ID="Label4" runat="server" Font-Bold="True" Font-Size="Medium" Visible="False"></asp:Label><br />
<br />
<asp:Label ID="Label5" runat="server" Font-Bold="True" Font-Size="Medium" Visible="False"></asp:Label></form>
</body>
</html>
___________________________________________________
ficheiro pedidos.aspx.vb
----------------------------------------------------------
Código:
Imports System.Data
Imports System.Data.SqlClient
Imports trata_sql
Partial Class Pedidos
Inherits System.Web.UI.Page
'************************************************************
' variaveis da grid view e da table_Exist
'***********************************************************
' cria a variavel strsql que vai chamar a a pesquiza sql
Dim ligacao, strsql As String
' cria data adapter
Dim sda, sda_ped_exist As SqlDataAdapter
' cria dataset
Dim ds, ds_ped_exist As DataSet
Dim num As Integer
' Dim inserir_sql_stock, inserir_sql_stock_pendente, inserir_sql_stock_pendente_req As String
'************************************************************
' variaveis das pesquizas
'***********************************************************
' variaveis que criam a string da respectiva pesquiza
'Dim ligacao_pedido, ligacao_id_util, ligacao_id_prod As String
' variaveis pertencentes ao pedido exstente nos requizitados
'Dim Select_ped_exist, ligacao_ped_exist As String
' variavel que vai guardar o stock do produto existente na bd resultante da pesquiza
Dim stock_prod As Integer
'guarda o id de utilizador pesquizado
Dim id_util As Integer
' 'guarda o id do produto pesquizado
Dim id_prod As Integer
' guarda o valor inserido na caixa de texto da grid
Dim pedido_posto As Integer
' guarda o stock que fica automaticamente pendente quando se efectua o pedido
Dim stock_pendente As Integer
' cria a table referente ao ds_exist_prod
Dim table_exist As DataTable
' conta as linhas da table_exists referentes Select_ped_exist
' caso seja cont=1 não existe nenhuma linha com esse registo
' caso contrario existe
Dim cont As Integer
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'' '*****************************************************
'' 'botão da grid view
'' '*****************************************************
'If Not IsPostBack Then
Dim rnd As New Random
Dim auxRnd As Integer
Dim bt As Button
Dim auxHiddenArgument As HiddenField
For Each row As GridViewRow In GridView_pedidos.Rows
auxRnd = rnd.Next()
bt = CType(row.FindControl("Btn_pedir"), Button)
auxHiddenArgument = CType(row.FindControl("auxHiddenArgument"), HiddenField)
bt.CommandArgument = auxRnd
auxHiddenArgument.Value = auxRnd
Next
' End If
End Sub
Protected Sub GridView_pedidos_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles GridView_pedidos.RowCommand
'variaveis que guardam valores de sessão de utilizador
Dim utilizador As String = Session("Login") ' guarda o nome de utilizador em sessão
Dim dia As String = Session("HorarioLogin") ' guarda o dia em que o utilizador se logou
' Dim num_linhas As Integer = Session("NumLinhasReq")
Dim Data_Hora As DateTime = DateTime.Now ' guarda o tempo e a hora se sistema actual
If (e.CommandName = "BotaoPedir") Then
Dim txt As String = ""
Dim auxHiddenArgument As String = ""
Dim nome_produto As String
' Dim id_prod As Integer
' Dim stock_prod As Integer
For Each row As GridViewRow In GridView_pedidos.Rows
auxHiddenArgument = CType(row.FindControl("auxHiddenArgument"), HiddenField).Value
If (e.CommandArgument = auxHiddenArgument) Then 'encontrou o botão k fez o pedido
txt = CType(row.FindControl("Txt_Quantidade"), TextBox).Text
'capta o nome do produto do botão clicado
nome_produto = row.Cells(3).Text
stock_prod = Val(row.Cells(4).Text)
id_prod = Val(row.Cells(1).Text)
' id_prod = GridView_pedidos.SelectedDataKey.Value
' Dim chave_id As DataKey = Me.GridView_pedidos.DataKeys(1)
'Dim id As DictionaryEntry = chave_id.Value
' danos o id do utilizador
id_util = procura_id_utilizador(utilizador)
'****************************************************************
'****************************************************************
'****************ZONA DE GRAVAÇÃO DE REGISTO ********************
'****************************************************************
'****************************************************************
pedido_posto = Val(txt)
stock_pendente = stock_prod - pedido_posto
If stock_pendente < 0 Then
stock_pendente = -stock_pendente
Else
stock_pendente = 0
End If
' Me.Label2.Visible = True
' Me.Label2.Text = " stk_pend - > " & stock_pendente
'testa se o valor do pedido digitado na caixa de texto da grid em relação
'ao id do produto dessa linha é menor que o stock desse mesmo produto
If stock_prod > 0 Then
Dim ligacao_stock As SqlConnection = New SqlConnection(str_ligacao)
Dim inserir_sql_stock As String = " Insert into TabPedido( " & _
" IdUtilizador,IdProduto,DataHora,Quantidade,Estado) " & _
" values (@IdUtilizador,@IdProduto,@DataHora,@Quantidade,@Estado)"
Dim comando = New SqlCommand(inserir_sql_stock, ligacao_stock)
' cria as variaveis tipo sql parameter associadas aos respectivos tipos
Dim IdUtilizador As SqlParameter = New SqlParameter("@IdUtilizador", SqlDbType.Int)
Dim IdProduto As SqlParameter = New SqlParameter("@IdProduto", SqlDbType.Int)
Dim DataHora As SqlParameter = New SqlParameter("@DataHora", SqlDbType.DateTime)
Dim Quantidade As SqlParameter = New SqlParameter("@Quantidade", SqlDbType.Int)
' Dim Codigo As SqlParameter = New SqlParameter("@Codigo", SqlDbType.Int)
Dim Estado As SqlParameter = New SqlParameter("@Estado", SqlDbType.SmallInt)
IdUtilizador.Value = id_util
IdProduto.Value = id_prod
DataHora.Value = Data_Hora
Quantidade.Value = pedido_posto - stock_pendente
' Codigo = conta_linhas + 1
Estado.Value = 0
comando.Parameters.Add(IdUtilizador)
comando.Parameters.Add(IdProduto)
comando.Parameters.Add(DataHora)
comando.Parameters.Add(Quantidade)
' comando.Parameters.Add(Codigo)
comando.Parameters.Add(Estado)
ligacao_stock.Open()
'retorna o número de registros afetados pela instrução SQL
num = comando.executenonquery
If num = 1 Then
Me.Lbl_mensagem.Visible = True
Me.Lbl_mensagem.Text = "Pedido feito com sucesso"
Else
Me.Lbl_mensagem.Visible = True
Me.Lbl_mensagem.Text = "Erro de sistema Favor contactar o Administrador "
End If
ligacao_stock.Close()
End If
''********************************************************************
'' Testa pata os produtos acima de stock
If stock_pendente > 0 Then
Dim ligacao_stock_pend As SqlConnection = New SqlConnection(str_ligacao)
Dim inserir_sql_stock As String = " Insert into TabPedido( " & _
" IdUtilizador,IdProduto,DataHora,Quantidade,Estado) " & _
" values (@IdUtil,@IdProd,@DataHor,@Quant,@Estad)"
Dim comando = New SqlCommand(inserir_sql_stock, ligacao_stock_pend)
'cria as variaveis tipo sql parameter associadas aos respectivos tipos
Dim IdUtil As SqlParameter = New SqlParameter("@IdUtil", SqlDbType.Int)
Dim IdProd As SqlParameter = New SqlParameter("@IdProd", SqlDbType.Int)
Dim DataHor As SqlParameter = New SqlParameter("@DataHor", SqlDbType.DateTime)
Dim Quant As SqlParameter = New SqlParameter("@Quant", SqlDbType.Int)
'Dim Codigo As SqlParameter = New SqlParameter("@Codigo", SqlDbType.Int)
Dim Estad As SqlParameter = New SqlParameter("@Estad", SqlDbType.SmallInt)
IdUtil.Value = id_util
IdProd.Value = id_prod
DataHor.Value = Data_Hora
Quant.Value = stock_pendente
Estad.Value = 1
' insere os valores na bd
comando.Parameters.Add(IdUtil)
comando.Parameters.Add(IdProd)
comando.Parameters.Add(DataHor)
comando.Parameters.Add(Quant)
comando.Parameters.Add(Estad)
ligacao_stock_pend.Open()
' retorna o número de registros afetados pela instrução SQL
num = comando.executenonquery
If num = 1 Then
Me.Lbl_mensagem.Visible = True
Me.Lbl_mensagem.Text = "Pedido feito com sucesso"
Else
Me.Lbl_mensagem.Visible = True
Me.Lbl_mensagem.Text = "Erro de sistema Favor contactar o Administrador "
End If
ligacao_stock_pend.Close()
End If
''*************************** não mexer *****************************************
Exit For 'forçar saida do ciclo for each da greed view
End If 'fim do if (If (e.CommandArgument = auxHiddenArgument))
Next ' fim do ciclo ( For Each row As GridViewRow In GridView_pedidos.Rows)
End If ' fim do if ( If (e.CommandName = "BotaoPedir"))
End Sub
Protected Sub DDL_Tipo_Pedido_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DDL_Tipo_Pedido.SelectedIndexChanged
Me.GridView_pedidos.Visible = True
End Sub
#Region "funções"
' procura o id de utilizador referente ao utilizador que se encontra em sessão
Function procura_id_utilizador(ByVal util As String) As Integer
Dim id_util As Integer
Dim ligacao_id_util As String = str_ligacao
Dim Select_id_util As String = " SELECT Id FROM TabUtilizador " & _
" where TabUtilizador.login = '" & util & "'"
Dim id_util_SqlDataAdapter As SqlDataAdapter = New SqlDataAdapter(Select_id_util, ligacao_id_util)
Dim id_util_ds As DataSet = New DataSet
id_util_SqlDataAdapter.Fill(id_util_ds, "TabUtilizador")
Dim id_util_DataRow As DataRow
For Each id_util_DataRow In id_util_ds.Tables("TabUtilizador").Rows
id_util = Val(id_util_DataRow("Id").ToString)
Next
Return id_util
End Function
#End Region
End Class
tenho aqui um pequeno problema , como devem ter reparado , tenhos duas comparações:
If stock_prod > 0 , If stock_pendente > 0 , em quea a variavel stock_prod guarda o stock total existente do produto , e stock_pendemte guarda o valor acima do stock em relação ao valor que o utilizador escreve numa caixa de texto.
até ai tdo bem , ambas a variaveis ja descritras guardam o valor certo , comprovado por testes realizados.
o prob é que ao passar pelo primeiro "If stock_prod > 0 " ele guarda o valor certo na tabela, guardando apenas o que esta dentro de stock , e no 2º " If stock_pendente > 0" que devia guardar um reg na tabela com os valores para alem do stock existente não o guarda. não sei pq carga de agua.
notas:
Código:
Estado.Value = 0 - 'guarda na tabela o valor 0 coorespondente aos pedidos requisitados
Estado.Value = 1 - 'guarda na tabela o valor 1 coorespondente aos pedidos pendentes
agradecia uma resolução para o probema
Última edição: