Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Find su DataView con ordinamento diverso dalla chiave
mercoledì 25 maggio 2011 - 09.47
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 3.5
|
Windows 7
|
Visual Studio 2008
|
SQL Server Express
|
Crystal Reports 2008
zactime
Profilo
| Newbie
45
messaggi | Data Invio:
mer 25 mag 2011 - 09:47
Un saluto a tutti.
Il problema è il seguente.
Ho un DataSet. Da questo ricavo un DataView.
Il mio obbiettivo è ricercare un record all'interno di quest'ultimo.
Se (come da codice seguente) la chiave del record è rappresentata da "Campo1" e voglio ordinare il DataView per "Campo6" e "Campo2", quando effettuo il Find mi restituisce il seguente errore:
"Previsto il valore 2 per la chiave che si sta indicizzando. Ricevuto valore 1.".
Se cambio l'ordinamento del DataView a "Campo1" e quindi lo faccio coincidere con la chiave del record non genero eccezioni.
Perchè?
Come posso ovviare alla cosa?
Oscar
Il codice...
Dim ds As DataSet
Sub DataSetCreate()
ds = New DataSet
Dim tb As DataTable = New DataTable("MyTable")
Dim s As String() = {"Campo1", "Campo2", "Campo3", "Campo4", "Campo5", "Campo6"}
Dim t As Type() = {GetType(Integer), GetType(String), GetType(String), GetType(String), GetType(String), GetType(Integer)}
Dim x As Integer = 0
For x = 0 To s.Length - 1
Dim dc As DataColumn
dc = New DataColumn
dc.ColumnName = s(x)
dc.DataType = t(x)
tb.Columns.Add(dc)
Next
Dim keys(1) As DataColumn
keys(0) = tb.Columns(s(0))
tb.PrimaryKey = keys
ds.Tables.Add(tb)
Dim rnd As System.Random = New System.Random(CType(DateTime.Now.Millisecond, Integer))
Dim k As Integer = 0
For k = 1 To 100
Dim dr As DataRow = ds.Tables("MyTable").NewRow
dr(0) = k
dr(1) = "1" + k.ToString("000")
dr(2) = "2" + k.ToString("000")
dr(3) = "3" + k.ToString("000")
dr(4) = "5" + k.ToString("000")
dr(5) = rnd.Next(3000000)
ds.Tables("MyTable").Rows.Add(dr)
Next
ds.AcceptChanges()
CercaRecord()
End Sub
Sub CercaRecord()
Dim dv As DataView = New DataView(ds.Tables("MyTable"))
dv.Sort = "Campo6, Campo2"
'dv.Sort = "Campo1"
Dim IndiceTrovato As Long
Dim Filtro As Object
Filtro = CType("1", Object)
IndiceTrovato = dv.Find(Filtro)
MessageBox.Show(IndiceTrovato.ToString)
End Sub
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
mer 25 mag 2011 - 10:11
Usa il filtro per fare le ricerche.
zactime
Profilo
| Newbie
45
messaggi | Data Invio:
mer 25 mag 2011 - 10:32
Purtroppo il filtro non fa al caso mio in quanto ho bisogno di sapere, con un ordinamento ben preciso, l'indice del record.
La DataTable del DataSet dal quale sono partito per creare il DataView è ordinata allo stesso modo.
L'indice mi serve per puntare ad un preciso record della DataTable.
Se pensi che per ottenere ciò lo strumento giusto sia comunque il filtro ti prego di darmi qualche indicazione in più.
Grazie.
Torna su
Stanze Forum
Elenco Threads
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 !