ERRORE IN MODIFICA DATI DA GRID VIEW

mercoledì 27 ottobre 2010 - 23.03

mauri1961 Profilo | Senior Member

Ho una grid view che mi segnala l'errore 'IL NOME DI COLONNA "MILANO" NON E' VALIDO' (milano è il contenuto del campo ubicazione.text) quando selezione la funzione modifica della riga.

la sub che tratta tale comando è la seguente:


Sub modifica()
form_blocco.Visible = True
Dim id As String
id = request.QueryString("id")
Dim conn As New SqlConnection("Data Source=DELL-PORTATILE; Initial Catalog=NOTIFICHE;Integrated Security=SSPI")
conn.Open()
Dim command As New SqlCommand("select * from notifiche_01 where not_opera=" & id, conn)
Dim dr1 As SqlDataReader = command.ExecuteReader()
If dr1.Read Then
operazione.Text = "MODIFICA"
comunica.SelectedDate = dr1("not_comunicazione").date
ubicazione.Text = dr1("not_opera").ToString
indirizzo.Text = dr1("not_indirizzo").ToString
comune.SelectedValue = dr1("not_localita").ToString
committente.Text = dr1("not_committente").ToString
comm_cf.Text = dr1("not_comm_cf").ToString
responsabile.Text = dr1("not_responsabile").ToString
resp_cf.Text = dr1("not_resp_cf").ToString
coordinatore.Text = dr1("not_coord1").ToString
coord_cf.Text = dr1("not_cor1_cf").ToString
comm_cf.Text = dr1("not_comm_cf").ToString
dataini.Text = dr1("not_inizio").date
datafin.Text = dr1("not_fine").date
impresa.Text = dr1("not_impresa").ToString
comunesede.Text = dr1("not_comune").ToString
partitaiva.Text = dr1("not_impr_cf").ToString
importo.Text = dr1("not_importo").integer

End If
conn.Close()
End Sub


la sub di inserimento dei dati funziona correttamente.

i campi della tabella del database sono tutti varchar, tranne not_comunicazione, not_inizio, not_fine che sono date e not_importo che è integer.

Grazie, Maurizio

paoval72 Profilo | Senior Member

Ciao. Puoi postare il codice dell'aspx dove c'è il gridview?

PV

mauri1961 Profilo | Senior Member

eccolo.....

<asp:GridView ID="gv" runat="server" AutoGenerateColumns="False"
BackColor="#FFFFCC" Font-Names="Calibri" Width="1000px">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<a href="?op=MODIFICA&id=<%#DataBinder.Eval(Container.DataItem, "not_opera")%>">modifica</a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<a href="?op=ELIMINA&id=<%#DataBinder.Eval(Container.DataItem, "not_opera")%>">elimina</a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField headerText="Cantiere">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem, "not_opera")%>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" Width="400px" />
</asp:TemplateField>
<asp:TemplateField headerText="Data Comunicazione">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem, "not_comunicazione")%>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="50px" />
</asp:TemplateField>
<asp:TemplateField headerText="Committente">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem, "not_committente")%>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" Width="300px" />
</asp:TemplateField>
<asp:TemplateField headerText="Impresa">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem, "not_impresa")%>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left" VerticalAlign="Middle" Width="250px" />
</asp:TemplateField>
</Columns>
</asp:GridView>


Grazie, Maurizio

paoval72 Profilo | Senior Member

Ancora una cosa: puoi postare anche l'evento dove richiami la tua funzione "modifica"?
E' pr avere un quadro più completo.

PV

mauri1961 Profilo | Senior Member

questa è la page.load che seleziona automaticamente la sub "estrai":

Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Not Page.IsPostBack Then

Dim varop As String

If Request.QueryString("op") Is Nothing Then
varop = "ESTRAI"
Else
varop = Request.QueryString("op")
End If

If varop = "ESTRAI" Then estrai()
If varop = "INSERIMENTO" Then crea_form()
If varop = "MODIFICA" Then modifica()
If varop = "CANCELLAZIONE" Then elimina()


End If


a questo punto la sub estrai carica la gridview (che funziona perfettamente)


Sub estrai()
Dim strconn As String
Dim conn As SqlConnection
strconn = "Data Source=DELL-PORTATILE; Initial Catalog=NOTIFICHE;Integrated Security=SSPI"
conn = New SqlConnection(strconn)
Dim command As New SqlCommand("select not_comunicazione, not_opera, not_indirizzo, not_localita, not_committente, not_comm_cf, not_responsabile, not_resp_cf, not_coord1, not_cor1_cf, not_inizio, not_fine, not_impresa, not_impr_cf, not_comune, not_importo from notifiche_01", conn)
conn.Open()
Dim dr As SqlDataReader = command.ExecuteReader()
gv.DataSource = dr
gv.DataBind()
conn.Close()


form_blocco.Visible = False
End Sub

cliccando s modifica (gestito in gridview) mostra l'errore.

Grazie, Maurizio

paoval72 Profilo | Senior Member

Forse ho trovato. Dovrebbe essere ancora un problema di apici. Quando fai la select, gli passi la variabile "id", ma la colonna "not_opera" è varchar, quindi richiede una stringa racchiusa tra apici
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Prova e dimmi.
Ciao,
PV

mauri1961 Profilo | Senior Member

scusami ma non riesco a capire dove mettere gli apici, ho provato varie soluzioni ma non gliene piace una....
ciao, Maurizio

paoval72 Profilo | Senior Member

Gli apici che ti dicevo sono nella select del tuo command.
Senza gli apici l'id viene visto come un integer, andando in conflitto col tipo di colonna che invece è varchar
Adesso stai passando una stringa di select di questo tipo:

select * from notifiche_01 where not_opera= MILANO

Se la provi sul db, vedi che ti darà un errore come quello che ti ha dato.

La soluzione, quindi, è:
Dim command As New SqlCommand("select * from notifiche_01 where not_opera= APICE " & id & "APICE", conn)

ovviamente dove ho scritto APICE metti il segno '

La stringa della select dovrebbe risultare perciò qualcosa del tipo

"select * from notifiche_01 where not_opera= 'MILANO'


mauri1961 Profilo | Senior Member

effettivamente cosi non mi da più quell'errore ma, ahimè ora mi segnala
IMPOSSIBILE TROVARE IL MEMBRO PUBBLICO 'INTEGER' NEL TIPO 'DECIMAL'

ed è relativo all'istruzione : importo.text = dr1("not_importo").integer

effettivamente in inserimento definisco il campo Cint(importo.text) ma se metto cosi in modifica mi segnala errore di compilazione...

Grazie ancora, Maurizio

paoval72 Profilo | Senior Member

Questo perchè deduco (non avendo il tuo db sott'occhio) che nella tua tabella il campo "not_importo" sia dichiaratop Decimal, mentre tu cerchi di forzargli un valore Integer.
Dovrebbe bastare un cast:
importo.text =CDec(dr1("not_importo"))


Ora vado a pranzo, ma fammi sapere.
Ciao!


mauri1961 Profilo | Senior Member

ora i dati sono visualizzati. ho ancora qualche problemino ma vedo di arrivarci, in caso contrario ci risentiamo.

Grazie, Maurizio
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5