Modalità di ricerca all'interno di una tabella di un dataset

venerdì 27 aprile 2007 - 14.44

trinity Profilo | Guru

allora cerco di spiegarmi bene.

io ho una tabella province composta dai seguenti campi

codprovincia
codregione
nomeprovincia

sull'evento keyup di una textbox io scrivo questo codice:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

il quale mi permette di richiamare questa sub:

Private Sub caricaprovincia(ByVal provincia As String) Dim ObjProvincia, oProvincia As New PropertyProvincia Dim Read_record_Prov As New GestoreProvincia ObjProvincia.Provincia = provincia oProvincia = Read_record_Prov.CaricaRec(ObjProvincia) If IsNothing(oProvincia.Provincia) = False Then Me.TextBox6.Text = oProvincia.Provincia Me.TextBox14.Text = CStr(oProvincia.CodiceProvincia) Me.TextBox15.Text = CStr(oProvincia.CodiceRegione) Me.TextBox6.SelectionStart = provincia.Length Me.TextBox6.SelectionLength = Me.TextBox6.TextLength - provincia.Length End If End Sub

che mi permette mediante questa classe:

Public Function CaricaRec(ByVal ObjProvincia As PropertyProvincia) As PropertyProvincia Dim oProvincia As PropertyProvincia = New PropertyProvincia Try SqlCmd.CommandText = "GetProvincia" SqlCmd.Parameters.Add("@Provincia", SqlDbType.VarChar).Value = ObjProvincia.Provincia SqlCmd.Connection = Db SqlCmd.CommandType = CommandType.StoredProcedure SqlDr = SqlCmd.ExecuteReader If SqlDr.Read() Then oProvincia.CodiceProvincia = SqlDr.GetSqlInt32(0).Value() oProvincia.Provincia = SqlDr.GetSqlString(1).Value oProvincia.CodiceRegione = SqlDr.GetSqlInt32(2).Value End If Return oProvincia Catch ex As Exception Throw ex Finally SqlDr.Close() SqlCmd.Parameters.Clear() SqlCmd.Dispose() End Try End Function

di richiamare questa stored e ricercare le province man mano che digito la parola:

ALTER PROCEDURE [dbo].[GetProvincia] ( @Provincia Varchar(250)=NULL ) AS BEGIN IF @Provincia IS NULL OR LEN(@Provincia) = 0 SELECT codprov,descprov,codregione FROM dbo.Province WHERE 1 = 0 ELSE SELECT codprov,descprov,codregione FROM dbo.Province WHERE descprov LIKE @Provincia + N'%' END

visto che il procedimento è troppo lento perchè avviene connesso ad un db remoto, ho pensato di caricare tutte le province nella tabella di un dataset al momento dell'apertura della form e poi lavorare con la ricerca in locale...

Sono riuscito a caricare tutti i record nella tabella dataset. Ma non riesco a fare la ricerca come la facevo prima utilizzando ogni volta la stored.

di seguito ho scritto il codice che utilizzo per la ricerca nella tabella dataset:

Private Province As DataSet1.ProvinceDataTable Private RowProvince As DataSet1.ProvinceRow Private ObjProvincia, oProvincia As New PropertyProvincia Private ProvColl As New ProvinciaCollection Private Read_record_Prov As New GestoreProvincia caricoi dati nel dataset: 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 utilizzando questa classe e stored: classe: Public Function CaricaRecAll(ByVal ObjProvincia As PropertyProvincia) As ProvinciaCollection Dim ProvColl As New ProvinciaCollection SqlCmd.CommandText = "GetProvincia_1" Try SqlCmd.Connection = Db SqlCmd.CommandType = CommandType.StoredProcedure SqlDr = SqlCmd.ExecuteReader While SqlDr.Read ObjProvincia = New PropertyProvincia ObjProvincia.CodiceProvincia = SqlDr.GetSqlInt32(0).Value ObjProvincia.Provincia = SqlDr.GetSqlString(1).Value ObjProvincia.CodiceRegione = SqlDr.GetSqlInt32(2).Value ProvColl.Add(ObjProvincia) End While Catch ex As Exception Throw ex Finally SqlDr.Close() SqlCmd.Parameters.Clear() SqlCmd.Dispose() End Try Return ProvColl End Function Stored: ALTER PROCEDURE [dbo].[GetProvincia_1] AS BEGIN SELECT * FROM dbo.Province END

infine ecco come effettuo la ricerca e secondo me dopo sta l'errore:

Private Sub caricaprovincia(ByVal provincia As String) If IsNothing(RowProvince.NomeProvincia) = False Then Me.TextBox6.Text = RowProvince.NomeProvincia Me.TextBox14.Text = CStr(RowProvince.CodiceProvincia) Me.TextBox15.Text = CStr(RowProvince.CodiceRegione) Me.TextBox6.SelectionStart = provincia.Length Me.TextBox6.SelectionLength = Me.TextBox6.TextLength - provincia.Length End If End Sub

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

blaudio Profilo | Newbie

Ciao

Ma tu voui che nella textbox l'utente inizi a scrivere il nome della provicia e il programma lo aiuti nella compilazione e ti dia codice provincia e regione?

se crei 3 combobox una per l'inserimento e le altre due che puoi nascondere dove ti compariranno i codici, crei il dataset con una tabella con le tre colonne poi il codice dovrebbe essere così

Dim nomedataset As New DataSet("nomedataset")
' tu l'hai già caricato dicevi


Dim nometabella As DataTable

nometabella = nomedataset.Tables("nometabellaindataset")
nomecombobox.DataSource = nometabella
nomecombobox.DisplayMember = nometabella.Columns("nomecolonnadavisualizare").ColumnName.ToString
nomecombobox2.DataSource = nometabella
nomecombobox2.DisplayMember = nometabella.Columns("nomecolonna2davisualizare").ColumnName.ToString
nomecombobox3.DataSource = nometabella
nomecombobox3.DisplayMember = nometabella.Columns("nomecolonna3davisualizare").ColumnName.ToString


devi settare di tutte le combobox la proprietà AutoCompleteMode a suggestappend e AutoCompleteSource a ListItems

quando nella compbo box inseriscila prima lettera che è riferita ad unaprovincia il programma ti fa vedere tutte leparole che iniziano per quella lettera eman mano che scrivi filtra automaticamnete, se vedi la provincia che ti serve o tisposti con le frecce e e dai invio o continui a scrivere.
Una volata selezionata la provincia le altre due combo box conterrano il codice provincia e regione in automatico perchè tu hai selezionato la riga di quella provincia, se i codici non ti interessa visulizarli ma solo ricavarli ti conviene mettere la proprietà visible = false nelle due combobox che non vui che si vedano.

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