Laden...

Bekomme nur Standardeinträge im Crystal Report, Quelle locale mdf oder sdf DB

Erstellt von ToRi vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.602 Views
T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren
Bekomme nur Standardeinträge im Crystal Report, Quelle locale mdf oder sdf DB

verwendetes Datenbanksystem: <SqlClient oder SqlServerCe "lokal">
C# VS 2010 Net Famework 3.5 WinForm

Hallo allerseits,

Nach dem erstellen der DB's funktioniert soweit alles, das heisst, ich kann dach den Daten suchen, neue erstellen und sie bearbeiten etc.

Nun bin ich dabei einzelne Daten (Barcodes, Artikel und Preise) in einem Crystal Report so zusammen zu fassen, dass sie gedruckt werden können.

Beim übertragen der Daten bekomme ich aber nur Standardwerte, wahrscheinlich stammen die von den ID Parametern der DB (int, varchar usw.)

Diese Einträge ändern sich auch, wenn die Parameter geändert werden. das sind Farben oder Zahlenwerte etc.

Bestimmt ist das nur eine Einstellungssache in den Eigenschaften oder so, finde dazu aber leider nichts verwertbares.

Der Crystal Report wird wie folgt auf einfache Weise erstellt.
YouTube Link

Vielen Dank für die Unterstützung.

T
2.224 Beiträge seit 2008
vor 5 Jahren

Da ich beruflich mit den Crystal Reports arbeite, kann ich dir ggf. dabei helfen.
Wie sieht den der Code zum erstellen des Report Document Objekts aus und wie übergibst du die Datasource?

Wenn du die Daten sauber aus der DB in der Struktur wie die erwartete DataSource ziehst, dann sollte der Bericht auch sauber gefüllt werden.
Standardwerte kann es hier beim sauberen auslesen der Daten aus der DB sowie beim korrekten befüllen nicht geben.
Wenn die Daten in der DB auch korrekt sind, kann es nur bei dir eine falsche Umsetzung beim befüllen sein.
Hier musst du aber den Code zeigen und Infos liefern welche Spalten und Tabellen in deinem DataSet für die DataSoruce im Report verwendet werden.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren

Hallo T-Virus, danke für die Antwort. Ich mache das wie folgt:

Die DB bzw. Tabelle wird mit dem Server-Explorer wie folgt (Bilder im Anhang) erstellt.
Die Suche nach Einträgen funktioniert schon mal. Der Code dazu sieht so aus:

private void btnSearch_Click(object sender, EventArgs e)
{
    display();
}

private void textBox1_TextChanged_1(object sender, EventArgs e)
{
     textBox2.Text = "";
     textBox3.Text = "";
     textBox4.Text = "";
     textBox5.Text = "";
     textBox6.Text = "";
     textBox7.Text = "";
     display();
}

//Für jede weitere textBox einen Eintrag

void display()
{
     SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Admin\Documents\ArtikelDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
     DataTable dt = new DataTable();

     if (textBox1.Text.Length > 0)
     {
           SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM ARTIKEL WHERE ID LIKE '" + textBox1.Text + "%'", cn);
           da.Fill(dt);
     }
     dataGridView.DataSource = dt;
}

Nach dem ich mich vergewissert habe, dass die DB funktioniert, füge ich ein DataSet hinzu und in die leere Entwurfsoberfläche ziehe ich dann die im Server-Explorer erstellte Tabelle der DB.

Danach füge ich über add new Element Reporting das Element CrystalReports hinzu. In den vefügbaren Datenquellen wähle ich unter Projektdaten "ADO.NET-DataSets" und setze die entsprechende Tabelle auf die rechte seite, zu "Ausgewählte Tabellen" und gehe auf weiter. In "Verfügbare Felder" wähle ich die Einträge und setze sie auf die rechte Seite "Anzuzeigende Felder" und drücke dann fertig stellen.

Der Report wird erstellt. wenn ich nun auf "Hauptbericht Vorschau" gehe, sehe ich anstatt meine Daten folgendes:

Gelb
Tusday
Serienbrief

Aquamarin
Wednesday
OLAP

Dunkelblau
Wednesday
Formular

usw.

T
2.224 Beiträge seit 2008
vor 5 Jahren

Klingt genau nach der fehlenden Datenquelle.
Ich sehe auch keinen Code von dir in dem du ein ReportDocument erstellst und die Datenquelle bindest.
Dafür musst du ja Code haben/schreiben.
Im einfachsten Fall kannst du dein DataGridView DataTable in ein DataSet packen und dieses dann als DataSource verwenden.
Dabei musst du aber darauf achten, dass das DataTable und DataSet die gleichen Namen haben wie in der xsd.
Sonst kann der Bericht auch nicht die Daten aus dem Dataset und DataTable lesen, selbst wenn diese korrekt und gefüllt sind.
Hier im DataTable dann die TableName setzen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren

T-Virus, danke. Der Code und die ganze Vorgehensweise ist genau analog dem Beispiel im Video


 private void button1_Click(object sender, EventArgs e)
 {
       con.Open();
       SqlCommand cmd = con.CreateCommand();
       cmd.CommandType = CommandType.Text;
       cmd.CommandText = "SELECT * FROM ARTIKEL";
       cmd.ExecuteNonQuery();
       DataSet ds = new DataSet();
       SqlDataAdapter da = new SqlDataAdapter(cmd);
       da.Fill(ds.ARTIKEL);
       CrystalReport myReport = new CrystalReport();
       myReport.SetDataSource(ds);
       crystalReportViewer.ReportSource = myReport;
       con.Close();

 }

Ich habe das jetzt mal komplett anders gemacht und siehe da, es läuft.

T
ToRi Themenstarter:in
18 Beiträge seit 2018
vor 5 Jahren

War wohl der Datenbanktyp. Jedenfalls vielen Dank für die Hilfe !!

T
2.224 Beiträge seit 2008
vor 5 Jahren

Freut mich, dass es geklappt hat.
Aber du solltest deinen Code mal aufräumen.
Schau dir dazu mal das Drei-Schichten-Modell an.
Die Anwendungslogik sowie die Datenbankcodes gehören nicht in die UI.
Sowas gehört sauber über Schichten, hier entsprechende DLLs, getrennt um die Zuständigkeiten des Codes zutrennen und den Code auch zukünftig einfach zu warten.
Wenn du UI Code samt Logik und DB Zugriffscodes mischt, macht das die Anwendung fast unwartbar und auch nur sehr umständlich erweiterbar.

Im Forum findest du einiges Threads zu dem Thema sowie im FAQ und in den Artikeln noch passende Anleitungen.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.