2010-02-19 175 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)