2010-02-19 180 views
2

我填充一个DataTable,然后对该DataTable的DefaultView进行排序。当我将DataTable设置为我的报告的源时,排序不起作用。如果有帮助,这里是代码(的GetData返回一个有效的数据表):DataTable.DefaultView.Sort似乎没有工作

Dim dt As DataTable = a.GetData(Parm1, Parm2, Parm3) 

    If rbtSortByField1.Checked Then 
     dt.DefaultView.Sort = "Field1 ASC" 
    ElseIf rbtSortByField2.Checked Then 
     dt.DefaultView.Sort = "Field2 ASC" 
    ElseIf rbtSortByField3.Checked Then 
     dt.DefaultView.Sort = "Field3 ASC" 
    End If 

    rpt.SetDataSource(dt.DefaultView.Table) 
    'This also doesn't work 
    'rpt.SetDataSource(dt) 
+1

你是什么'rpt'传递数据视图水晶,而不是数据表作为? – SLaks 2010-02-19 19:07:52

+0

我敢打赌这是CrystalDecisions.CrystalReports.Engine.ReportDocument – David 2010-02-19 19:13:05

回答

1

假设这是一个水晶报表......

看到这篇文章。您无法对数据源进行排序,您需要让报告进行排序。

http://it.toolbox.com/blogs/coding-dotnet/sorting-the-fields-in-crystal-report-programmatically-16201

这里还涉及:

http://msdn.microsoft.com/en-us/library/ms225717.aspx

+0

是的,它是水晶报表。我已经改变了代码,但我不确定这一行: FieldDef = objReport.Database.Tables(“sp_LoadData”)。Fields(“Field1”) 我得到一个非特定的“系统错误”,没有行号引用。 sp_LoadData是我的存储过程。 objReport.Database.Tables(0).Fields(“Field1”)给出“对象引用未设置”错误。我感觉自己越来越近,但还不够。 – Marty 2010-02-19 21:13:55

1

您需要在

datatable.DefaultView.Sort = "col1, col2, col3" 
Dim dv As DataView = datatable.DefaultView 

myReportDocument.SetDataSource(dv)