1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema de gridview asp.net/vb.net

Discussão em 'Web Development' iniciada por alfinete, 11 de Julho de 2007. (Respostas: 4; Visualizações: 2968)

  1. alfinete

    alfinete Power Member

    Asp.net/vb.net sqlserver 2000

    este é o code asp da greed


    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>
            
            
            
            
            
            <asp:GridView 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="Id" InsertVisible="False" ReadOnly="True"
                         SortExpression="Id" Visible="False" />
                     <asp:BoundField DataField="Nome" HeaderText="Nome" SortExpression="Nome" />
                     <asp:BoundField DataField="Stock" HeaderText="Stock" SortExpression="Stock" Visible="False" />
                     <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"></asp:Label><br />
            <br />
            <asp:Label ID="Label2" runat="server" Font-Bold="True" Font-Size="Medium"></asp:Label><br />
            <br />
            <asp:Label ID="Label3" runat="server" Font-Bold="True" Font-Size="Medium"></asp:Label><br />
            <br />
            <asp:Label ID="Label4" runat="server" Font-Bold="True" Font-Size="Medium"></asp:Label><br />
            <br />
            <asp:Label ID="Label5" runat="server" Font-Bold="True" Font-Size="Medium"></asp:Label></form>
    </body>
    </html>
    
    
    
    
    ______________________________________________________________________________
    -----------------------------------------------------------------------------------------
    este é o meu code de funcionamento da greed

    Código:
    
    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
    
     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 Data_Hora As DateTime = DateTime.Now
    
    
            If (e.CommandName = "BotaoPedir") Then
                Dim txt As String = ""
                Dim auxHiddenArgument As String = ""
                Dim nome_produto As String
    
    
                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(2).Text
                        stock_prod = Val(row.Cells(3).Text)
                        id_prod = Val(row.Cells(1).Text)
                        
                         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 
    
    end sub
    
    
    
    o meu problema é que so capta o nome_produto,stock_prod e id_prod
    para a primeira linha da grid

    caso clique num botão da grid com numa linha que não seja a primeira, ele capta na mesma
    os valores da primeira

    Código:
    nome_produto = row.Cells(2).Text
    stock_prod = Val(row.Cells(3).Text)
    id_prod = Val(row.Cells(1).Text)
    

    gostava que alguem me ajudasse neste problema
     
  2. alfinete

    alfinete Power Member

    ja descobri o problema

    é que as colunas que captam o id_prod e stock_prod estavam com visible = false

    pois pondo o mesmo a true ja captan os valores

    ......................

    se alguem souber uma forma de por essas colunas com visivel = false

    e captar os valores dessas colunas , agradecia
     
  3. SoundSurfer

    SoundSurfer Power Member

    Experimenta por a false e usar o "DataKeyNames" .. vê no msdn como é que se usa.
     
  4. alfinete

    alfinete Power Member

    se me pudesses dar um exemplo de datakeynames , como se faz , que eu ja fui ver , e fiz julgo eu que como la estava e não funcionou

    pus o campo id com visible= false

    fim assim

    o minha coluna que tenho escondida na grid é a do id

    no qual na grid como keynames pus

    Código:
    <grid view ... DataKeyNames="Id">
    
    no vb fiz

    Código:
      Dim chave_id As DataKey = Me.GridView_pedidos.DataKeys(1)
      id_prod = chave_id.Value
    
    
    e ele dame sempre o mesmo id que qualquer item da grid que eu clique
     
  5. SoundSurfer

    SoundSurfer Power Member

    Não dá para fazer " row.DataItem " ?
     

Partilhar esta Página