Jag har data i ett dataset, vars kolumn RISK_CATEGORY innehåller värdena 'A', 'B' eller 'C'. Nu vill jag sortera datasetet så att alla A kommer först, sedan B o.s.v. Enligt MS skall det göras enligt kodraden nedan, men jag får det inte att funka. Datat är fortfarande osorterat Du får tillbaka en collection av DataRows med .select och de är sorterade. Hej! Raderna är visste "kopplade" till datasetet. De finns fortfarande kvar i sin datatable i datasetet. Micklar du med innehållet i raderna så slår ju det igenom. Att de är referenser till de datarows som finns i aktuellt dataset är självklart men vad jag menade är att Henrik i frågan undrade varför hans dataset inte var sorterat när han gjort sin select, missupfattat de returnerade referenserna till aktuella datarows och accessar aktuell data via aktuell ds.tabell istället... Jag använder nu en array av datarows som sorterat data:Sortera DataSet
dsCounterpartyInfo.Tables(0).Select(Nothing, "RISK_CATEGORY", DataViewRowState.OriginalRows)
Nån som vet?Sv: Sortera DataSet
/johan/Sv: Sortera DataSet
Datasetet ändras inte när du gör en DataTable.Select utan den returnerar en array med DataRows (som pekar på aktuella datarows i datasetet) som du kan iterera igenom.
Jag skulle använda en vy isället (exempel längst ned). Om du ändå vill använda .select så kan du göra på detta sätt:
Kod för att ta ut aktuellt ds: (Databas = pubs)
<code>
Dim da As SqlDataAdapter = New SqlDataAdapter("SELECT * FROM AUTHORS", "server=.;database=pubs;trusted_connection=true")
ds = New DataSet()
da.Fill(ds, "authors")
da.Dispose()
</code>
Loopa igenom de med DataTable.Select valda datarow objekt:
<code>
Dim dr As DataRow
For Each dr In ds.Tables("authors").Select(Nothing, "au_lname ASC")
Debug.WriteLine(dr("au_lname"))
Next
</code>
Jag skulle dock rekommendera att använda en dataview istället. Då kommer datat att kunna nås sorterat om du accessar DataTablen genom vyn:
<code>
ds.Tables("authors").DefaultView.Sort = "au_lname"
Dim i As Integer
For i = 0 To ds.Tables("authors").DefaultView.Count - 1
Debug.WriteLine(ds.Tables("authors").DefaultView(i)("au_lname"))
Next
</code>Sv: Sortera DataSet
Personligen rekomenderar jag att i det här fallet köra med select och inte dataview. Fått för mig att det är tyngre att skapa en ny datavy. Att använda default kan vara dumt om man har den till annat.
För övrigt så är denna fråga postad under fel ämne. Den har ju inget med VB.Net i sig att göra. Skulle ha legat under .net-framework.
lycka tillSv: Sortera DataSet
Vore kul att kolla var lasten ligger om du säger att det är segare med vyer... Har inte upplevt detta som ett problem i de projekt jag kört.
/MickeSv: Sortera DataSet
Dim drFilteredData() As Data.DataRow
drFilteredData = dsCounterpartyInfo.Tables(0).Select(Nothing, "RISK_CATEGORY ASC", DataViewRowState.CurrentRows)
Problemet är att datat i datarows ÄNDÅ inte blir sorterat efter innehållet i kolumnen
RISK_CATEGORY, som alltså innehåller ett tecken 'A' till 'D'. Har även provat att läsa ut en kolumn ASCII(CATEGORY) och försökt sortera på den, men det ger samma nedslående resultat.
Vad göra!?