Ir para conteúdo

Arquivado

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

bruno_mosciatti

Problema com UPDATE gridView

Recommended Posts

Bom dia

tenho uma área restrita de um sistema para editar dados de um gridview associado a um banco de dados.

as funções de editar são as básicas : editar e deletar.
São 4 campos editáveis.


Estou tendo o seguinte problema ao clicar em "update" :

2z4elxh.jpg

Código aspx

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master" CodeBehind="admin.aspx.vb" Inherits="WebApplication2.admin" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Bem vindo, administrador</h2>
    <asp:Label ID="lblMensagem" runat="server"></asp:Label>
    <p>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
            <Columns>
                <asp:BoundField DataField="id" HeaderText="ID" ReadOnly="True" />
                <asp:BoundField DataField="nome" HeaderText="Nome" />
                <asp:BoundField DataField="area" HeaderText="Área" />
                <asp:BoundField DataField="ramal" HeaderText="Telefone" />
                <asp:BoundField DataField="eml" HeaderText="Email" />
                <asp:CommandField ShowDeleteButton="True" />
                <asp:CommandField ShowEditButton="True" />
            </Columns>
         </asp:GridView>
    </p>

        
</asp:Content>

CÓDIGO .vb

Imports System.Data.OleDb
Public Class admin
    Inherits System.Web.UI.Page
    Dim conn As New OleDb.OleDbConnection
    Dim da As New OleDb.OleDbDataAdapter
    Dim dp As String = "Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;"
    Dim dbsource As String = "DATA SOURCE = \\ramais.accdb"
    Dim olecom As New OleDb.OleDbCommand
    Dim dr As OleDb.OleDbDataReader
    Dim ds As DataSet = New DataSet
    Dim cmd As OleDbCommand
    Dim sSQL As String


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Session("login") = 0 Then
            Response.Redirect("restrito.aspx")
        End If

        If IsPostBack = False Then
            CarregaGrid()
        End If

    End Sub

    Public Sub CarregaGrid()


        sSQL = ""
        sSQL = "SELECT FUNCIONARIOS.id, FUNCIONARIOS.nome, FUNCIONARIOS.area, FUNCIONARIOS.Ramal, FUNCIONARIOS.CELULAR, FUNCIONARIOS.eml "
        sSQL = sSQL & "FROM(FUNCIONARIOS) "
        sSQL = sSQL & "ORDER BY FUNCIONARIOS.nome"
        conn = New OleDbConnection(dp & dbsource)
        conn.Open()
        'Try
        da = New OleDbDataAdapter(sSQL, conn)
        'preenche o dataset
        da.Fill(ds, "ramais")
        'exibe os dados no grid
        Me.GridView1.DataSource = ds
        Me.GridView1.DataBind()
        'Finally
        conn.Close()
    End Sub

    Private Sub GridView1_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles GridView1.PageIndexChanging
        GridView1.PageIndex = e.NewPageIndex
        CarregaGrid()
    End Sub

    Private Sub GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GridView1.RowCancelingEdit
        GridView1.EditIndex = -1
        CarregaGrid()
    End Sub

    Private Sub GridView1_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
        DelItem(e.Values.Item(0))
        CarregaGrid()

    End Sub


    Private Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView1.RowEditing
        GridView1.EditIndex = e.NewEditIndex
        CarregaGrid()
        Me.GridView1.Rows.Item(e.NewEditIndex).BackColor = System.Drawing.Color.LightGray
        Me.GridView1.Rows.Item(e.NewEditIndex).ForeColor = System.Drawing.Color.Black
    End Sub

    Private Sub DelItem(ByVal sItemID As String)

        sSQL = ""
        sSQL = " DELETE * FROM FUNCIONARIOS "
        sSQL = sSQL & " WHERE id =" & sItemID
        conn = New OleDbConnection(dp & dbsource)
        conn.Open()
        'Try
        cmd = New OleDbCommand(sSQL, conn)

        dr = cmd.ExecuteReader()

        dr.Close()
        'Finally
        conn.Close()
        'End Try


    End Sub

    Private Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating


        UpItem(e.NewValues.Item(1), e.NewValues.Item(2), e.NewValues.Item(3), e.NewValues.Item(4), e.NewValues.Item(5))
        GridView1.EditIndex = -1
        CarregaGrid()

       
    End Sub
    Private Function UpItem(ByVal sItemID As String, ByVal sItem2 As String, ByVal sItem3 As String, ByVal sItem4 As String, ByVal sItem5 As String)

        Dim sSQL As String
        Dim conn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader

        If sItem2 <> "" Then
            sSQL = ""
            sSQL = " UPDATE FUNCIONARIOS SET "
            sSQL = sSQL & " nome = '" & sItem2 & ""
            sSQL = sSQL & " area ='" & sItem3 & " "
            sSQL = sSQL & " ramal ='" & sItem4 & " "
            sSQL = sSQL & " eml ='" & sItem5 & "';"
            sSQL = sSQL & " WHERE id ='" & sItemID & ""
            Response.Write("teste")
            conn = New OleDbConnection(dp & dbsource)
            conn.Open()
            'Try
            cmd = New OleDbCommand(sSQL, conn)
            Dim rowsAffected As Integer = cmd.ExecuteNonQuery()
            dr = cmd.ExecuteReader
            If rowsAffected Then
                Me.lblMensagem.Text = "Atualizado com sucesso"
            Else
                Me.lblMensagem.Text = "Informações incorretas!"
            End If
            dr.Close()
            'Finally
            conn.Close()
            'End Try


        Else
            Me.lblMensagem.Text = "Dados incompletos!"
        End If

        CarregaGrid()
    End Function

End Class

Alguém pode me ajudar, por favor?

Obrigado desde já

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara boa tarde!

 

Você verificou os valores, esse erro geralmente da quando não ta passando valor, o index deve estar -1, bom nunca fiz update dessa maneira, mais o erro que está dando aparenta ser esse.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, poste o novo código, mas só a sessão que dá erro.

 

    Private Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating


        UpItem(e.NewValues.Item(0), e.NewValues.Item(1), e.NewValues.Item(2), e.NewValues.Item(3), e.NewValues.Item(4), e.NewValues.Item(5))
        GridView1.EditIndex = -1
        CarregaGrid()

       
    End Sub
    Private Function UpItem(ByVal sItem0 As String, ByVal sItem2 As String, ByVal sItem3 As String, ByVal sItem4 As String, ByVal sItem5 As String, ByVal sItem6 As String)

        Dim sSQL As String
        Dim conn As OleDbConnection
        Dim cmd As OleDbCommand
        Dim dr As OleDbDataReader

        If sItem2 <> "" Then
            sSQL = ""
            sSQL = " UPDATE FUNCIONARIOS SET "
            sSQL = sSQL & " nome = '" & sItem2 & ""
            sSQL = sSQL & " area ='" & sItem3 & " "
            sSQL = sSQL & " ramal ='" & sItem4 & " "
            sSQL = sSQL & " eml ='" & sItem5 & "';"
            sSQL = sSQL & " WHERE id ='" & sItem0 & ""
            Response.Write("teste")
            conn = New OleDbConnection(dp & dbsource)
            conn.Open()
            'Try
            cmd = New OleDbCommand(sSQL, conn)
            Dim rowsAffected As Integer = cmd.ExecuteNonQuery()
            dr = cmd.ExecuteReader
            If rowsAffected Then
                Me.lblMensagem.Text = "Atualizado com sucesso"
            Else
                Me.lblMensagem.Text = "Informações incorretas!"
            End If
            dr.Close()
            'Finally
            conn.Close()
            'End Try


        Else
            Me.lblMensagem.Text = "Dados incompletos!"
        End If

        CarregaGrid()
    End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um item a mais no parâmetro da sub.

 

Veja se você possui todos estes itens antes de inserir eles na sua procedure.

 

De qual sub você diz?

 

Como assim ver se eu possuo esses itens?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, já consegui corrigir o problema.

 

Agora resta uma dúvida :

Quando eu clico em editar na minha gridview, vamos supor que é a última célula, por tanto eu tive que rolar a página para baixo.. Quando clico em edit, a gridview carrega novamente e a página sobe para o início e eu tenho que rolar para baixo de novo para poder editar os dados..

 

Alguma solução para isso, sem ser o uso de ajax??

 

EDIT:

Já consegui! Utilizei o MaintainScrollPositionOnPostback="true" no Page.

 

Podem encerrar o tópico. Obrigado a todos

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.