Find su DataView con ordinamento diverso dalla chiave

mercoledì 25 maggio 2011 - 09.47
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Windows 7  |  Visual Studio 2008  |  SQL Server Express  |  Crystal Reports 2008

zactime Profilo | Newbie

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

Usa il filtro per fare le ricerche.

zactime Profilo | Newbie

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.
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5