esmaspäev, 1. märts 2010

ReportVieweri andmetabeli sorteerimine .NET 3.5 korral

Selline asi tuli seoses LINQ-iga ReportVieweril välja, et kui paneb dünaamiliselt ReportViewerile
DataSource külge siis sai seal ka .NET2.0 korral kohe andmeid sorteerida

dsReportsTableAdapters.RAPORT_KUIDO_STableAdapter ta = new dsReportsTableAdapters.RAPORT_KUIDO_STableAdapter();
dsReports.RAPORT_KUIDO_SDataTable tb = new dsReports.RAPORT_KUIDO_SDataTable();
ta.Fill(tb, begin, end);

ja panid andmed koos sorteerimisega Reportvieweri DataSource-le külge
this.ReportViewerAsendus.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("dsReports_RAPORT_KUIDO_S", tb.Select("","SURNAME")));

see tb.Select("","SURNAME") tegi sorteerimise

Mingi hetk aga .NET3.5 tableAdapteri peale üle minnes, kus LINQ ka küljes on, tekib häda
nende veergudega, mis võivad andmebaasist tulles ka NULL-id olla, ehk
ReportVieweri IsNothing() funktsioon enam ei funka.

=IsNothing(Fields!VALID_UNTIL_DATE.Value) enam NULL-i ei tunnista, kuna veerus on "mingi muu asi sees", ehk dsReports.RAPORT_KUIDO_SDataTable tüübi asemel on DataRow[] massiiv millega ReportViewer 2008 Service Pack1 NULL-iste väärtuste korral hätta jääb.


Asja saab jälle tööle nii, et tuleb sorteerimine teha DataTable -dega ära ennem kui reportViewerile külge paned.

Lisakood sorteerimiseks võib välja näha nii


DataRow[] tulem= tb.Select("", "SURNAME");
dsReports.RAPORT_KUIDO_SDataTable tb2 = new dsReports.RAPORT_KUIDO_SDataTable();
foreach (DataRow rida in tulem)
{
tb2.ImportRow(rida); //impordime read uude tabelisse
}


this.ReportViewerAsendus.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("dsReports_RAPORT_VALITUT_ASUKKAAT_KUIDO_S", tb2));// siin paneb juba uue tabeli külge