Aiuto non mi funge dataset.select

sabato 28 aprile 2007 - 17.33

trinity Profilo | Guru

ho creato una tabella in un dataset (segue figura)

156x85 5Kb


in questa tabella carico una serie di record e fino qui tutto ok.

poi nella form in una determinata textbox l'utente digita la provincia che vuole ricercare io vorrei utilizzare il metodo dataset.select e andare a selezionare la provincia che l'utenete sta digitando nella colonna NomeProvincia mediante un like per esempio come di seguito riportato:

Dim Province As DataSet1.ProvinceDataTable Dim RowProvince As DataSet1.ProvinceRow Dim provincia as string=me.textbox1.text Province.Select("NomeProvincia LIKE" & "'" & provincia & "'" & "+ '%'") If IsNothing(RowProvince.NomeProvincia) = False Then Me.TextBox6.Text = RowProvince.NomeProvincia Me.TextBox14.Text = CStr(RowProvince.CodiceProvincia) Me.TextBox15.Text = CStr(RowProvince.CodiceRegione) End If

solo che non mi funziona. Dove sbaglio?
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Cteniza Profilo | Guru

>esempio come di seguito riportato:
>
> Dim Province As DataSet1.ProvinceDataTable
> Dim RowProvince As DataSet1.ProvinceRow
> Dim provincia as string=me.textbox1.text
>
>Province.Select("NomeProvincia LIKE" & "'" & provincia & "'"
>& "+ '%'")
> If IsNothing(RowProvince.NomeProvincia) = False Then
> Me.TextBox6.Text = RowProvince.NomeProvincia
>Me.TextBox14.Text = CStr(RowProvince.CodiceProvincia)
>Me.TextBox15.Text = CStr(RowProvince.CodiceRegione)
> End If
>
>solo che non mi funziona. Dove sbaglio?
>Cirillo Fabio

E' che il tuo codice è quanto di più vicino a vb6 tu potessi utilizzare.
Ci sono a mio avviso due grossi errori (tralasciando l'uso di cstr dove esiste tostring su un campo che che sono già stringhe):
L'istruzione "select" restituisce un array di datarows
Quindi si scrive:
Dim myDr() As DataRow = Province.Select( ...)
Il secondo errore è una conseguenza del primo.
if isnothing(...) va sostituita con il test HasRows dato sull'array di datarows.


trinity Profilo | Guru

>>esempio come di seguito riportato:
>>
>> Dim Province As DataSet1.ProvinceDataTable
>> Dim RowProvince As DataSet1.ProvinceRow
>> Dim provincia as string=me.textbox1.text
>>
>>Province.Select("NomeProvincia LIKE" & "'" & provincia & "'"
>>& "+ '%'")
>> If IsNothing(RowProvince.NomeProvincia) = False Then
>> Me.TextBox6.Text = RowProvince.NomeProvincia
>>Me.TextBox14.Text = CStr(RowProvince.CodiceProvincia)
>>Me.TextBox15.Text = CStr(RowProvince.CodiceRegione)
>> End If
>>
>>solo che non mi funziona. Dove sbaglio?
>>Cirillo Fabio
>
>E' che il tuo codice è quanto di più vicino a vb6 tu potessi
>utilizzare.
>Ci sono a mio avviso due grossi errori (tralasciando l'uso di
>cstr dove esiste tostring su un campo che che sono già stringhe):
il cstr come il cint me lo consiglia direttamente il compilatore vb net 2005 ti faccio cioè se io a dei campi numerici come Province.Codiceregione, che è un numerico, devo far visualizzare questo valore in una text ed ometto il cstr, come dicevo il compilatore mi segan errore ed il suo intellisense mi dice di mettere cstr

>L'istruzione "select" restituisce un array di datarows
>Quindi si scrive:
>Dim myDr() As DataRow = Province.Select( ...)

Comunque io non riesco a far funzionare la sintassi scritta nella select è quella che vorrei risolvere

>Il secondo errore è una conseguenza del primo.
>if isnothing(...) va sostituita con il test HasRows dato sull'array
non ho trovato HasRows ma HasErros forse ti sei confuso?


Comunque carico i dati nella tabella del dataset in questo modo:
ProvColl = Read_record_Prov.CaricaRecAll(ObjProvincia) For i As Integer = 0 To ProvColl.Count - 1 REM=====SALVO I DATI NEL DATASET DELL'ALBERGO===== Province = New DataSet1.ProvinceDataTable RowProvince = CType(Province.NewRow, DataSet1.ProvinceRow) RowProvince.NomeProvincia = ProvColl.Item(i).Provincia RowProvince.CodiceProvincia = ProvColl.Item(i).CodiceProvincia RowProvince.CodiceRegione = ProvColl.Item(i).CodiceRegione Province.Rows.Add(RowProvince) Next i

e poi ho seguito il tuo consiglio per la ricerca:

Dim myrow() As DataRow = Province.Select("NomeProvincia = 'Frosinone'")

ecc.....

ma l'array non si valorizza. Ho visto che sull'Msdn è gli esempi vengono svolti nello stesso modo che ho fatto io. Non riesco a capire l'errore.


Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Cteniza Profilo | Guru

Per utilizzare select non mi sembra ci siano alternative, io non so su che msdn tu abbia guardato ma ... questo è il link giusto
http://msdn2.microsoft.com/it-it/library/system.data.datatable.select(VS.80).aspx
Come potrai vedere in ogni caso ottieni un array di datarow
Quindi il mio suggerimento:
Dim myrow() As DataRow = Province.Select("NomeProvincia = 'Frosinone'")
Coime vedi corrisponde in pieno ad uno degli overload del metodo
Ovviamente poi (mi sono sbagliato, hasrows è del dataadapter, non ho guardato). dovrai continuare con il test se ci sono righe:
If myrow.Count <> 0 then
MessageBox.Show('Ci sono ' & myRow.Count.ToString & ' righe')
end if
in nessun caso questa estrazione la puoi visualizzare nell'oggetto bindato dal datatable (myrow non è bindato con nessun controllo)
puoi assegnare il valore di una riga ad un textbox o ad una variabile
myTextbox.text = CType(myRow(numerorow)("campo"),String)
...
Su .NET esistono molte funzioni standard che per VB.NET vengono wrappate, per funzioni come cstr, cint, cdbl esistono ctype nel caso di box/unbox e/o convert nel caso di conversione di valore

trinity Profilo | Guru

>Per utilizzare select non mi sembra ci siano alternative, io
>non so su che msdn tu abbia guardato ma ... questo è il link
>giusto
>http://msdn2.microsoft.com/it-it/library/system.data.datatable.select(VS.80).aspx
>Come potrai vedere in ogni caso ottieni un array di datarow
>Quindi il mio suggerimento:
>Dim myrow() As DataRow = Province.Select("NomeProvincia = 'Frosinone'")
>Coime vedi corrisponde in pieno ad uno degli overload del metodo
>Ovviamente poi (mi sono sbagliato, hasrows è del dataadapter,
>non ho guardato). dovrai continuare con il test se ci sono righe:
>If myrow.Count <> 0 then
>MessageBox.Show('Ci sono ' & myRow.Count.ToString & ' righe')
>end if
>in nessun caso questa estrazione la puoi visualizzare nell'oggetto
>bindato dal datatable (myrow non è bindato con nessun controllo)
>puoi assegnare il valore di una riga ad un textbox o ad una variabile
>myTextbox.text = CType(myRow(numerorow)("campo"),String)
>...
>Su .NET esistono molte funzioni standard che per VB.NET vengono
>wrappate, per funzioni come cstr, cint, cdbl esistono ctype nel
>caso di box/unbox e/o convert nel caso di conversione di valore


quindi mi stai dicendo che è meglio utilizzare il converto quando per esempio devo asseganre ad una textbox un campo di tipo numerico.
>
>

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Cteniza Profilo | Guru

Per convertire in stringa esiste anche un ToString "personalizzato" per ogni oggetto.
Se usi cstr(variabile) e poi vai a vedere l'assembly probabilmente troverai la chiamata alla funzione cstr su microsoft.visualbasic e da questa il richiamo a Convert.ToString

trinity Profilo | Guru

ho capito quindi a questo punto giustamente faccio prima a scrivere convert. ecc....

ok grazie

a Ps ho risolto con il dataset.select

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
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