konto usunięte

Temat: .NET Tworzenie raportu

Witam,

W aplikacji .NET chciałbym wykorzystać raport crystalowy. Czy wykorzystując w raporcie połączenie ODBC(RDO), wyciągając w designerze dane z tabel, bez większych utrudnień można zmienić connectionstring dla takiego połączenia z poziomu kodu c# ?

Pozdrawiam,
mateusz

Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: .NET Tworzenie raportu

Tak, w Crystal Reports API jest metoda do zmiany parametrów połączenia z bazą danych.
Co prawda nie podaje się wprost connectionstring lecz poszczególne parametry (serwer, login, hasło, baza danych), ale dosyć łatwo dokonać konwersji.

Ja stworzyłem sobie konwerter z użyciem SqlConnectionStringBuilder
http://msdn.microsoft.com/en-us/library/system.data.sq...

konto usunięte

Temat: .NET Tworzenie raportu

Dzięki :)

konto usunięte

Temat: .NET Tworzenie raportu

Próbuję przekazać nowy connection string do raportu opartego na źródle DSN(odbc). Niestety otrzymuję błąd

"Nie można otworzyć połączenia"

Jakiś czas temu pisałem o podobnym problemie - wówczas rozwiązałem ów przekazując tablice danych ...


string connectionString = TimestampHelper.ParseConnectionString(sesja.Connection.ConnectionString);
//this.crystalReportViewer1.re

System.Data.Common.DbConnectionStringBuilder builder = new System.Data.Common.DbConnectionStringBuilder();
builder.ConnectionString = connectionString;
string server = builder["Server"] as string;
string database = builder["Database"] as string;
string userid = "";
string password = "";


if (connectionString.Contains("User ID"))
{
userid = builder["User ID"] as string;
password = builder["Password"] as string;
}

string sciezka = @"C:\Wydruk zlecenia.RPT";

ReportDocument rd = new ReportDocument();

rd.Load(sciezka);

ConnectionInfo conInfo = new ConnectionInfo();
if (userid == "")
{
// rd.SetDatabaseLogon(server, database);
conInfo.DatabaseName = database;
conInfo.ServerName = server;
conInfo.IntegratedSecurity = true;
}
else
{
//rd.SetDatabaseLogon(userid, password, server, database);
conInfo.DatabaseName = database;
conInfo.ServerName = server;
conInfo.IntegratedSecurity = false;
conInfo.UserID = userid;
conInfo.Password = password;
}

//if (userid == "")
// rd.Subreports[0].SetDatabaseLogon(server, database);
//else
// rd.Subreports[0].SetDatabaseLogon(userid, password, server, database);

Tables CrTablice = rd.Database.Tables;
foreach (Table CrTabela in CrTablice)
{
TableLogOnInfo tloi = new TableLogOnInfo();
tloi.ConnectionInfo = conInfo;

CrTabela.ApplyLogOnInfo(tloi);
CrTabela.Location.Substring(CrTabela.Location.LastIndexOf(".") + 1);
}


this.crystalReportViewer1.ReportSource = rd;



konto usunięte

Temat: .NET Tworzenie raportu


zmieniłem jak poniżej i jest ok;)

ReportDocument cryRpt = new ReportDocument();
TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
ConnectionInfo crConnectionInfo = new ConnectionInfo();
cryRpt.Load(sciezka);

if (userid == "")
cryRpt.SetDatabaseLogon(server, database);
else
cryRpt.SetDatabaseLogon(userid, password, server, database);

DataTable dtSrsZlecenia = DB.SrsZlecenia(sesja.Connection.ConnectionString);
cryRpt.Database.Tables["SrsZlecenia"].SetDataSource(dtSrsZlecenia);

DataTable dtSrsUrzadzenia = DB.SrsUrzadzeniaRaport(sesja.Connection.ConnectionString);
cryRpt.Database.Tables["SrsUrzadzenia"].SetDataSource(dtSrsZlecenia);


DataTable dtKontrahenci = DB.KontrahenciRaport(sesja.Connection.ConnectionString);
cryRpt.Database.Tables["Kontrahenci"].SetDataSource(dtKontrahenci);

DataTable dtCzesci = DB.SrsCzesciRaport(sesja.Connection.ConnectionString);
cryRpt.Database.Tables["SrsCzesci"].SetDataSource(dtCzesci);

this.crystalReportViewer1.ReportSource = cryRpt;


Marcin S.

Marcin S. Programista, trener
i konsultant w
zakresie .NET/.NET
Cor...

Temat: .NET Tworzenie raportu

Proponuję nie kodować na sztywno nazw tabeli lecz przejść po ich kolekcji.
Ja mam uniwersalną metodę do podmiany źródła tabel i stosuję ją we wszystkich moich projektach :)

Swoją drogą, stworzyłem jakiś czas temu własną bibliotekę do obsługi Crystala w stylu Fluent:



Report
.Load(@"c:\raport1.rpt")
.SetDatabaseLogon("raport", "XXX", "server", "Northwind" )
.SetParameter("CustomerId", 100)
.SetParameter("OrderDate", DateTime.Today)
.ExportToPDF()
.Save(@"c:\temp\export1.pdf");

Następna dyskusja:

Crystal Reports 2008 - twor...




Wyślij zaproszenie do