Change Crystal Report Sort Order Programatically In VB.NET
Example showing how to change the sort order of records in a crystal report from VB.Net.
If you're using VB.Net to drive a Crystal Report, you might want to choose the sort order for the records from within your program. In this case you have to set certain properties of the ReportDocument object. In this example, we have the field name to sort by in variable sSortField, and the table that field belongs to in sSortTable. We are sorting by "customerName" in table "tblCustomers".
Note that we are changing the field the report is already sorted by. I.e. you must already have the report sorted by something, or you will get error "Invalid sort number". If you haven't already, store a default sort order within your report, using Record Sort Expert from the Report menu.
Dim rd As New CrystalDecisions.CrystalReports.Engine.ReportDocument
Dim sf As CrystalDecisions.CrystalReports.Engine.FieldDefinition
Dim tli As New CrystalDecisions.Shared.TableLogOnInfo
Dim iSortTableIndex as Integer = -1
Dim sSortField As String = "customerName"
Dim sSortTable As String = "tblCustomers"
' Load the report file
rd.Load("c:\myreport.rpt")
' Set the connection properties to the database, as usual...
With tli.ConnectionInfo
.DatabaseName = "databasename"
.Password = "password"
.ServerName = "server"
.UserID = "user"
.Type = CrystalDecisions.[Shared].ConnectionInfoType.SQL
End With
' Get the index of the sort table while applying db logo info
For i As Integer = 0 To rd.Database.Tables.Count - 1
rd.Database.Tables(i).ApplyLogOnInfo(tli)
If sSortTable <> "" AndAlso _
sSortTable.ToUpper = rd.Database.Tables(i).Name.ToUpper Then
iSortTableIndex = i
End If
Next
' Sort records (The report must already be sorted by something, we are just
' changing that sort to a different field)
If iSortTableIndex <> -1 AndAlso sSortField <> "" Then
sf = rd.Database.Tables(iSortTableIndex).Fields(sSortField)
rd.DataDefinition.SortFields(0).Field = sf
End If
