CERCARE UN RECORDCON VB.NET

venerdì 02 luglio 2010 - 18.20

ste.chi Profilo | Newbie

Ciao raga

una semplicissima istuzione come il findfirst in vb6 dove indicavi il il tipo di filtro da usare non esiste in vb.net
ho usato l'istruzione find

es.
Public Function TrovaRecord(ByVal k As String, ByVal codec As String) As Boolean

'Dim dv As New DataView(MedicoDataSet.Tables(0))
Dim dv As DataView = MedicoDataSet.Tables(0).DefaultView

dv.Sort = ordine

Dim indiceTrovato As Integer = dv.Find(k)
If indiceTrovato < 0 Then
Return False
Else
mIndiceRecord = indiceTrovato
Return True
End If

ma se io ho aperto un db dandogli un ordine per ragsoc
es.
Dim MedicoConnection As New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source = " & sValue & "\cliente.MDB")
Dim MedicoDataAdapter As New OleDbDataAdapter("SELECT * FROM medico order by ragsoc", MedicoConnection)

il find non trova più la posizione giusta del record perche io ho settato il sord per ID

come devo fare ???

alx_81 Profilo | Guru

>Ciao raga
ciao
>una semplicissima istuzione come il findfirst in vb6 dove indicavi
>il il tipo di filtro da usare non esiste in vb.net
>ho usato l'istruzione find
>come devo fare ???
che ne dici di usare l'operatore SELECT del datatable?
DataTable.Select(String) Method
http://msdn.microsoft.com/en-us/library/det4aw50.aspx

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

ciao Alx io ho provato seguendo l'esempio ma non mi è molto chiaro per che
foundRows(i) da quello che ho capito dovrebbe restituirmi il numero di riga però ti spiego
io ho appena inserito un nuovo record per fare in maniera di riposizionarmi su questo record devo reperire il numero di riga , io ho la chiave del record
e fino a questo punto tutto ok penso

Dim table As DataTable = objDataSet.Tables("medico")

' Presuming the DataTable has a column named Date.
Dim expression As String
expression = "id ='" & TextBox1.Text & "'"
Dim foundRows() As DataRow

' Use the Select method to find all rows matching the filter.
foundRows = table.Select(expression)

setto il select però questo non basta per posizionarmi sul record desiderato,
all'struzione position devo passargli il numero di riga mi potresti indicare le istruzioni da usare, ho trovato degli esempi che fanno un for fino a che non trovano la chave che desidero ma mi sembra un pochino assurdo cosa mi dici

Grazie MILLE

alx_81 Profilo | Guru

>setto il select però questo non basta per posizionarmi sul record desiderato,
se l'id è univoco foundrows avrà sicuramente al suo interno la riga che ti serve.
Poi usi il datarow.. non capisco dove sia il tuo problema..
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

scusa ma ho iniziato da poco ad usare vb.net nonè che saresti cosi gentile da farmi un esempio

Grazie

alx_81 Profilo | Guru

>scusa ma ho iniziato da poco ad usare vb.net nonè che saresti
>cosi gentile da farmi un esempio
Il problema è che sarebbe identico a quello del link.
Cosa c'è che ti blocca nell'esempio del link che ti ho mandato?


--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

come dicevi tu
Poi usi il datarow...
come devo usarlo

alx_81 Profilo | Guru

>come dicevi tu
>Poi usi il datarow...
>come devo usarlo
se sai che ti torna una riga e basta:

la riga è questa:
Dim Riga As DataRow = foundRows(0)

se devi accedere alla colonna ti serve un'altra parentesi:
foundRows(0)(indice_colonna)
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

acusa alx dimmi pure che sono un pochino tordo ma non saresti cosi gentile da postarmi un esempio completo per effettuare una ricerca di un record su un database ormai credo di impazzire

alx_81 Profilo | Guru

>acusa alx dimmi pure che sono un pochino tordo ma non saresti
>cosi gentile da postarmi un esempio completo per effettuare una
>ricerca di un record su un database ormai credo di impazzire
giusto per essere certo.. mi stai chiedendo il codice per ricavare un record da database, oppure un codice per ricavare un datarow da un datatable già popolato da database?
Perchè le due cose cambiano..
Da quanto sembra il tuo codice legge da un dataset già popolato. Era quello che ti serviva o dovevi fare una semplice select per id?
Dopo che hai ricavato il recod per quell'id ti serve ancora quel datatable? Oppure possiamo semplicemente scrivere la query che ti torna la riga?
Ad ogni modo, mi posti la create della tabella su cui lavorare così l'esempio sarà riapplicabile al tuo ambiente?
ciao

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

posso mandarti l'esempio che uso per fare le prove e cercare di imparare come funziona

alx_81 Profilo | Guru

>posso mandarti l'esempio che uso per fare le prove e cercare
>di imparare come funziona
ok, manda pure, però c'è comunque da capire cosa ti serve. Se devi filtrare a priori e ti basta ricavare un record, basta usare ado.net per ricavare il solo record in base al parametro che passi.
Se invece a te serve la sorgente con tutti i record e vuoi solo filtrarla dopo per poi riutilizzare la tabella sorgente in seguito, dobbiamo agire sul tuo codice.
Però devo capire se nella tua situazione reale vuoi semplicemente ricavare un record o se devi usare quelle tabelle che hai creato. Questo cambia molto l'overhead dovuto al traffico dei dati ed in generale cambia le performances, oltre che il codice usato per leggere un record

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

ok ti mando il codice in vb.net 2008
nell'esempio ho scritto anche cosa mi serve
fammi sapere se ti è arrivato
grazie mille ancora

alx_81 Profilo | Guru

>ok ti mando il codice in vb.net 2008
>nell'esempio ho scritto anche cosa mi serve
>fammi sapere se ti è arrivato
non ho vb installato sulla mia macchina.
Però dovrebbe essere una cosa simile a questa:

Private Function GetRowsByFilter(id As String) As DataRowCollection Dim dt As New DataTable("customers") Dim dr As DataRowCollection = Nothing Using conn As New OleDbConnection("tua conn string") conn.Open() Using cmd As New OleDbCommand("SELECT * FROM Customer WHERE id = @id", conn) cmd.Parameters.AddWithValue("@id", id) Using da As New OleDbDataAdapter(cmd) da.Fill(dt) If dt.Rows.Count > 0 Then dr = dt.Rows End If End Using End Using conn.Close() End Using Return dr End Function
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

ciao alx grazie per l'aiuto ho provato il codice però ho alcune domande veloci la variabile dr
dovrebbe restituirmi il numero di row che viene trovato applicando la select,
però in questo modo dr vale sempre 1( da quello che ho capito) io in realtà ho bisogno di mantenere il database con tutti i record accessibili e posizionarmi solo su quello desiderato, come si faceva con vb 6 usando il FINDFIRST "CRITERIO".
poi ho provato ad inserire nel mio pulsante la funzione GetRowsByFilter ma restituisce sempre 1 ma non trova nulla

Private Function GetRowsByFilter(ByVal id As String) As DataRowCollection
Dim dt As New DataTable("Customers")
Dim dr As DataRowCollection = Nothing
Using conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=example.mdb;Persist Security Info=False")
conn.Open()
Using cmd As New OleDbCommand("SELECT * FROM Customers WHERE id = @id", conn)
cmd.Parameters.AddWithValue("@id", id)
Using da As New OleDbDataAdapter(cmd)
da.Fill(dt)
If dt.Rows.Count > 0 Then
dr = dt.Rows
End If
End Using
End Using
conn.Close()
End Using
Return dr
End Function

SCUSAMI ANCORA TANTO ....

alx_81 Profilo | Guru

>però in questo modo dr vale sempre 1( da quello che ho capito)
il metodo torna una DataRowCollection e quindi una lista di DataRow generica (da 1 a n).
Leggi qui la reference:
http://msdn.microsoft.com/it-it/library/system.data.datarowcollection.aspx

>io in realtà ho bisogno di mantenere il database con tutti i
>record accessibili e posizionarmi solo su quello desiderato,
>come si faceva con vb 6 usando il FINDFIRST "CRITERIO".
Ok, ora ho capito che ti serve comunque avere tutti i dati, non avendo ricevuto risposta prima ho provato a farti l'esempio più prestante. Tienilo buono soprattutto per le using, che sono importanti.
Eccoti un esempio di codice che spero possa aiutarti:

' ricava le righe Private Function GetRowsByFilter(id As String, source As DataTable) As DataRow() Dim drs As DataRow() = source.[Select]([String].Format("id={0}", id)) If drs.Length > 0 Then Return drs End If Return Nothing End Function ' per leggere le righe basta fare un for each sull'array Private Sub DisplayRows() Dim table As DataTable = objDataSet.Tables("customers") Dim drs As DataRow() = GetRowsByFilter("a", table) For Each dr As var In drs MessageBox.Show(dr("colonna").ToString()) Next End Sub
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

ALX sono il tuo incubo...
-----------------------------------
con la funzione GetRowsByFilter cerco la row in base al filtro che cli passo giusto ?
-----------------------------------
Private Function GetRowsByFilter(ByVal id As String, ByVal source As DataTable) As DataRow()

Dim drs As DataRow() = source.[Select]([String].Format("id={0}", id))

If drs.Length > 0 Then
------------------------------------
questo dovrebbe ritornare il numero di riga
Return drs
------------------------------------
End If

Return Nothing
End Function

' per leggere le righe basta fare un for each sull'array
Private Sub DisplayRows()
Dim table As DataTable = objDataSet.Tables("customers")
---------------------------------------
drscontiene il numero di riga ?
Dim drs As DataRow() = GetRowsByFilter(textbox1.text, table)
---------------------------------------
in questa posizione vb non conosce var cosa devo indicare ?
For Each dr As var In drs
MessageBox.Show(dr("colonna").ToString())
Next
End Sub

poi se voglio usare l'istruzione position devo passargli drs o cosa devo indicare ???

dai che forse ce la faccio grazie al tuo aiuto


TI FARANNO SANTO

alx_81 Profilo | Guru

>ALX sono il tuo incubo...
seeeee.. ne hai da impegnarti prima di diventare il mio incubo

>con la funzione GetRowsByFilter cerco la row in base al filtro che cli passo giusto ?
esatto, torna la lista dei DataRow del source passato in base al filtro sull'id. Se è uno, torna una lista di DataRow con solo un DataRow dentro (posizione 0).

>questo dovrebbe ritornare il numero di riga
no, torna la lista dei DataRow. E' proprio un array di righe..

> drscontiene il numero di riga ?
no, contiene quello tornato dal metodo precedente, ovvero la lista dei DataRow. E' l'array di righe di cui ti parlavo sopra..

>in questa posizione vb non conosce var cosa devo indicare ?
scusami non ho vb, ho scritto al volo. Quello corretto è:

For Each dr As DataRow In drs MessageBox.Show(dr("colonna").ToString()) Next

>poi se voglio usare l'istruzione position devo passargli drs o cosa devo indicare ???
position? non capisco.. a che ti serve? hai già la riga..

>TI FARANNO SANTO
sei fuori..

--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

inserendo il codice mi genera un errore su questa riga
Dim drs As DataRow() = source.[Select]([String].Format("id={0}", id))

Impossibile interpretare il token ':' nella posizione 16.

l'struzione position la uso per scorrere i record avanti e indietro e pensavo bisognasse passare id della riga per posizionarmi sul record che volevo

mi sono sempre dimenticato di dirti che uso il databindin fatta in questa maniera
' create later
Private Sub BindFields()

' Clear any previous bindings...
txtCustomerID.DataBindings.Clear()
txtFirstName.DataBindings.Clear()
txtLastName.DataBindings.Clear()
txtAddress.DataBindings.Clear()


' Add new bindings to the DataView object...
' First parameter in the Add method
' is the name of the control property that we wish to bind to the data source
' Second parameter is the data view object
' Third parameter is the name of the column in the Microsoft Access database
txtCustomerID.DataBindings.Add("Text", objDataView, "ID")
txtFirstName.DataBindings.Add("Text", objDataView, "FirstName")
txtLastName.DataBindings.Add("Text", objDataView, "LastName")
txtAddress.DataBindings.Add("Text", objDataView, "Address")

End Sub

alx_81 Profilo | Guru

>inserendo il codice mi genera un errore su questa riga
>Dim drs As DataRow() = source.[Select]([String].Format("id={0}",id))
>Impossibile interpretare il token ':' nella posizione 16.
prova a rimuovere le parentesi quadre.. sinceramente l'errore è un tantino fuorviante..

>l'struzione position la uso per scorrere i record avanti e indietro
>e pensavo bisognasse passare id della riga per posizionarmi sul
>record che volevo
allora tieniti salvato a livello di classe un indice che poi userai come indice della collezione dei record.
Se devi scorrere record per record di una tabella, allora non ti serve la query per id, basta ordinare per ciò che ti serve e poi posizionarti sulla i-esima posizione.
è un semplice array. Quando ti sposti in "avanti" aggiungi 1 all'indice e quando fai back sottrai controllando che la posizione stia sempre tra 0 e lunghezza - 1.


--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

ho provato ma stessa cosa ...
mamma mia ma in vb6 era così facile perchè devono sempre complicare le cose ..

ho provato questo codice

Dim myRows() As DataRow
Dim myTable As DataTable
' Get the DataTable of a DataSet.
myTable = objDataSet.Tables("customers")
myRows = myTable.Select(String.Format("id={0}", TextBox1.Text))
Dim i As Integer
' Print the value one column of each DataRow.
For i = 0 To myRows.GetUpperBound(0)
'Console.WriteLine(myRows(i)("CompanyName"))
MessageBox.Show(myRows(i).ToString())
Next i


ma nella msgbox mi scrive system.data.datarow mi sai spiegare perchè ? non dovrebbe indicarmi il numero di riga.

alx_81 Profilo | Guru

>ho provato ma stessa cosa ...
>mamma mia ma in vb6 era così facile perchè devono sempre complicare le cose ..
credimi, adesso è dieci mila volte meglio. Se scrivi codice come va scritto sei molto più sicuro che le cose vadano e poi il linguaggio è gestito da un framework, il che rende tutto molto più portabile..

>myRows = myTable.Select(String.Format("id={0}", TextBox1.Text))
prova questa, forse mancano le apici se l'id è stringa:
myRows = myTable.Select(String.Format("id='{0}'", TextBox1.Text))

> Dim i As Integer
> ' Print the value one column of each DataRow.
> For i = 0 To myRows.GetUpperBound(0)
> 'Console.WriteLine(myRows(i)("CompanyName"))
> MessageBox.Show(myRows(i).ToString())
> Next i

>ma nella msgbox mi scrive system.data.datarow mi sai spiegare perchè? non dovrebbe indicarmi il numero di riga.
mettiti in testa che non è il numero di riga! il valore della riga è i, l'i-esima riga del tuo set di datarow.
vedi system.data.datarow perchè myRows(i).ToString() è l'espressione stringa di myRows(i) che è la riga, devi indicare anche la colonna che vuoi visualizzare come fai nel writeline della console.


--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

ok in questa maniera funziona nella msgbox mi restituisce il valore della colonna che cerco, un piccolo passo lo abbiamo fatto però io adesso volevo che i miei oggetti di testo associati con il binding visualizzassero i dati del record selezionato
grazie intanto

alx_81 Profilo | Guru

>ok in questa maniera funziona nella msgbox mi restituisce il
>valore della colonna che cerco, un piccolo passo lo abbiamo fatto
>però io adesso volevo che i miei oggetti di testo associati con
>il binding visualizzassero i dati del record selezionato
Il binding è legato ad un dataview. Puoi creare un datatable con un datarow (quello che hai trovato) e passare il relativo dataview al databinding..

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

io ho provato a fare in questo modo
se ne esiste uno più veloce mi faresti mica un piccolo esempio

Private Sub DisplayRows(ByVal id As String) Dim table As DataTable = objDataSet.Tables("customers") Dim drs As DataRow() = GetRowsByFilter(id, table) Dim dr As DataRow Dim I As Integer Dim POS As Integer 'For Each dr In drs 'MessageBox.Show(dr(1).ToString()) 'Next 'LEGGE TUTTI I CAMPI DEL DB For Each table In objDataSet.Tables For Each dr In table.Rows I = I + 1 If Not dr.IsNull(0) Then If dr(0).ToString = id Then POS = I - 1 End If End If Next dr Next table objCurrencyManager.Position = POS End Sub

GRAZIE

alx_81 Profilo | Guru

Il tuo codice gira TUTTE le tabelle, e, di ogni tabella TUTTE le righe, e di ogni riga TUTTI i campi..
Io ancora non ho capito cosa devi fare sai?
Ti serve una soluzione che scorre un databinding e valorizza le textbox??
se devi valorizzare solo la position del binding per fare in modo di visualizzare nelle textbox il record corrente allora è un altro discorso da quello che abbiamo seguito fino ad ora.
Se ti serve la posizione da passare poi al BindingSource devi scorrere solamente il tuo datatable e, QUANDO TROVI il record con quel filtro, allora torni l'indice nel datatable.
Quell'indice è la tua POS.

Fai semplicemente un foreach su tutte le righe di una tabella, e, per ogni riga, se riga("ID") = param, ti fermi, esci dal ciclo e torni l'indice che avrai incrementato per ogni ciclo.
Scusami ma non avevo proprio capito quello che ti serviva.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

supponi il caso di avere un anagrafica clienti e devi ricercare un cliente passandogli o ID o ragione sociale ecc..quello che devo fare io e posizionarmi su quel record e di visualizzare i dati negli oggetti di testo

Fai semplicemente un foreach su tutte le righe di una tabella, e, per ogni riga, se riga("ID") = param, ti fermi, esci dal ciclo e torni l'indice che avrai incrementato per ogni ciclo.
Scusami ma non avevo proprio capito quello che ti serviva.

dici di fare più o meno come ho fatto nell'esempio sopra facendo un for che scorre la tabella e poi quando si verifica il filtro esco dal for

alx_81 Profilo | Guru

>supponi il caso di avere un anagrafica clienti e devi ricercare
>un cliente passandogli o ID o ragione sociale ecc..quello che
>devo fare io e posizionarmi su quel record e di visualizzare
>i dati negli oggetti di testo
ma vedi che ci sono contraddizioni? Forse sbaglio io.. ma perchè mai dovrei ricavare prima TUTTI i record e poi filtrare?
Filtra direttamente sull'id e mostra il record. Fine..
Se vuoi andare al record successivo fai un filtro diverso. L'impressione è che scorri, la realtà è che se ti serve un record alla volta, perchè mai ricavarli tutti?
Potrebbero essere a migliaia e come puoi ben capire, potrebbero bloccare l'applicazione al primo caricamento.

Io direi di cambiare approccio, cercare solamente un record alla volta, cambiando l'id.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

Ciao Alx grazie mille per l'aiuto ma probabilemte ho capito che forse è meglio che mi legga qualche bel manuale me ne consigli uno che possa essere semplice ma allo stesso modo completo
io ho visto questo http://www.apogeonline.com/libri/88-503-2051-5/scheda
cosa ne pensi

alx_81 Profilo | Guru

>Ciao Alx grazie mille per l'aiuto ma probabilemte ho capito che
>forse è meglio che mi legga qualche bel manuale me ne consigli
>uno che possa essere semplice ma allo stesso modo completo
>io ho visto questo http://www.apogeonline.com/libri/88-503-2051-5/scheda
non lo conosco. Non leggo manuali in italiano, ma su amazon ne trovi fino a che vuoi di visual basic.

>cosa ne pensi
penso che intanto dovremo risolvere il problema, poi inizi a studiare, che ne dici?

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

OK ti preparo un piccolo video cosi ti faccio vedere esattamente quello che devo fare

ste.chi Profilo | Newbie

ok ho fatto un piccolo video di quello che devo fare

www.mediwork.net/aiuto.zip

poi fammi sapere grazie

alx_81 Profilo | Guru

>ok ho fatto un piccolo video di quello che devo fare
Rieccoci, ho trovato il tempo di vederlo..
allora.. andiamo per passo:

1) Funzione Show Records
ovviamente con essa devi visualizzare tutti i record. In quel caso, basta fare fill del datatable e passarlo come sorgente alla tua lista. E fino a qui sembra che ci siamo.

2) Funzione New/Save Record. Anche qui sembra che ci siamo
Mi posti il codice del salvataggio? Vorrei vedere cosa succede dopo che hai salvato il record.

3) La GetRowsByFilter torna un elenco di righe che hanno il campo ID = a quello che passi. Se volessi fare firstname, basta cambiare la string.format con firstname. Sto solo componendo il filtro di una query SQL.

4) Il nuovo record viene sempre inserito in coda? Se sì, puoi semplicemente posizionarti all'ultima riga. In caso contrario, dopo il salvataggio, puoi fare il filtro direttamente sul controllo che visualizza.
Che controllo utilizzi?
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

ste.chi Profilo | Newbie

1) ok ci siamo

2) ecco il codice che uso per salvare il record

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



le procedure filldatasetandview e bindfields sono :

Private Sub FillDataSetAndView() ' Initialize a new instance of the DataSet object... objDataSet = New DataSet() ' Fill the DataSet object with data... objDataAdapter.Fill(objDataSet, "customers") ' Set the DataView object to the DataSet object... objDataView = New DataView(objDataSet.Tables("customers")) ' Set our CurrencyManager object to the DataView object... objCurrencyManager = CType(Me.BindingContext(objDataView), CurrencyManager) DgViewAllCustomers.DataSource = objDataView End Sub ' This method will bind the textboxes to the dataview object ' and it will enable us to use currency manager to move throught ' records in teh database with buttons that we will ' create later Private Sub BindFields() ' Clear any previous bindings... txtCustomerID.DataBindings.Clear() txtFirstName.DataBindings.Clear() txtLastName.DataBindings.Clear() txtAddress.DataBindings.Clear() ' Add new bindings to the DataView object... ' First parameter in the Add method ' is the name of the control property that we wish to bind to the data source ' Second parameter is the data view object ' Third parameter is the name of the column in the Microsoft Access database txtCustomerID.DataBindings.Add("Text", objDataView, "ID") txtFirstName.DataBindings.Add("Text", objDataView, "FirstName") txtLastName.DataBindings.Add("Text", objDataView, "LastName") txtAddress.DataBindings.Add("Text", objDataView, "Address") End Sub

3) ok la funzione mi torna l'elenco delle righe con ID = a quello che gli passo...
domanda nella funzione io uso "id='{0}'" ma se volessi usare "FirstName='{0}'" cosa si intende con {0} il numero di colonna che corrisponde alla colonna del campo del db o cosa ??

4)cosa intendi "dopo il salvataggio puoi fare il filtro direttamente sul controllo che visualizza ? cosa intendi per controllo la datagridview ??

alx_81 Profilo | Guru

>2) ecco il codice che uso per salvare il record
con essa, dopo il salvataggio ricolleghi la sorgente al controllo, quindi perdi la posizione, perchè la lista si "resetta".

>3) domanda nella funzione io uso "id='{0}'" ma se volessi usare
>"FirstName='{0}'" cosa si intende con {0} il numero di colonna
>che corrisponde alla colonna del campo del db o cosa ??
la funzione Format può avere più parametri, il primo è la stringa che vuoi ottenere formata da PLACEHOLDER (segnaposto) che sono indicati da {n}. Ogni numero indicato nelle parentesi è la posizione dell'array di parametri che passi dopo:

String.Format("CIAO {0}, GRAZIE {1}, ADDIO {2}", "!", "?", ".") = "CIAO !, GRAZIE ?, ADDIO ."

>4)cosa intendi "dopo il salvataggio puoi fare il filtro direttamente
>sul controllo che visualizza ? cosa intendi per controllo la datagridview ??
Sì, senza andare a fare query, puoi pensare di scorrere i dati sul controllo e posizionarti sulla riga che ha l'id che hai appena inserito.
In questo modo anche i campi saranno collegati con la selezione.

--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
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