Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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" :
/applications/core/interface/imageproxy/imageproxy.php?img=http://oi43.tinypic.com/2z4elxh.jpg&key=769987302f31337ba48df7269f2e1eeccd5760e35a03169589eaebb381d57fc3" alt="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á
O index começa do 0, então seria 0, 1, 2, 3 e 4 e não 1, 2, 3, 4 e 5
O index começa do 0, então seria 0, 1, 2, 3 e 4 e não 1, 2, 3, 4 e 5
Coloquei a partir do 0 e ficou na mesma
Cara, poste o novo código, mas só a sessão que dá erro.
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 FunctionTem um item a mais no parâmetro da sub.
Veja se você possui todos estes itens antes de inserir eles na sua procedure.
>
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?
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
Marque a resolução e o tópico será encerrado.
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.