beowolf
Goto Top

CSharp Anzeigeproblem mit mehreren Tabellen im DataGrid

Hallo Zusammen,

ich befinde mich gerade Daten aus einer Access Datenbank auszulesen und zu druckern. Das Druckerklasse stammt noch von meinem Vorgänger, so dass ich diese nicht angefasst habe. Der Inhalt bzw. das Gesamte Datagrid wird an diese Klasse übergeben und kann somit gedruckt werden.
Zu meinem Problem:
Meine Access Datenbank besteht aus 3 Tabellen. Teilweise lese ich mehrere Tabellen in das Datagrid ein. Funktioniert alles wunderbar, solange ich nicht drucke. Wurde der Inhalt einer Tabelle ausgedruckt, sind die Abfragen anderen Abfragen nicht mehr vollständig.
Aufgrund der Spaltenbreite nutze ich 5 Spalten pro Abfrage. Eine Abfrage kann mehrere Tabellen beinhalten.

Hier mal der Quelltext eines Teiles der Abfragen:

Abfrage Inventar + Raum
        
private string sqlueb = null;
private DataSet dsueb = null;
private OleDbConnection conueb = null;
private DataTable tblueb;

private void button3_Click_1(object sender, EventArgs e)
{
sqlueb = "SELECT Raum.Raum, Inventar.InvNr, Inventar.Bezeichnung, Inventar.Anzahl, Inventar.KSt FROM enthaelt, Inventar, Raum WHERE enthaelt.RaumID=Raum.Nr and enthaelt.Inventarnummer=Inventar.InvNr AND Inventar.gelöscht = 'xxx' ORDER BY Raum.Raum;";  
// FillDataGrid();
try
{
conueb = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Inventur.mdb");  
OleDbDataAdapter adapterueb = new OleDbDataAdapter(sqlueb, conueb);
dsueb = new DataSet();
tblueb = new DataTable();
conueb.Open();
adapterueb.Fill(dsueb);
conueb.Close();
dataGrid.DataSource = dsueb.Tables;
dataGrid.Font = new Font("Verdana", 8);  
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
dataGrid.CaptionText = "Übersicht";  
} 

Abfrage Raum
private string sqlraum = null;
private DataSet dsraum = null;
private OleDbConnection conraum = null;

private void btn_Raum_Click(object sender, EventArgs e)
{
sqlraum = "SELECT Raum.Nr, Raum.Raum, Raum.x, Raum.y, Raum.z FROM Raum ORDER BY Raum.Raum;";  
//FillDataGrid();
try
{
conraum = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Inventur.mdb");  
OleDbDataAdapter adapterraum = new OleDbDataAdapter(sqlraum, conraum);
dsraum = new DataSet();
conraum.Open();
adapterraum.Fill(dsraum);
conraum.Close();
dataGrid.DataSource = dsraum.Tables;
dataGrid.Font = new Font("Verdana", 8);  
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
dataGrid.CaptionText = "Räume";  
}

Abfrage Inventar
  
private string sqlinv = null;
private DataSet dsinv = null;
private OleDbConnection coninv = null;

private void btn_Inventar_Click(object sender, EventArgs e)
{
sqlinv = "SELECT Inventar.InvNr, Inventar.Bezeichnung, Inventar.Anzahl, Inventar.KSt, Inventar.Bemerkungen FROM Inventar Where Inventar.gelöscht = 'xxx' ORDER BY InvNr;";  
//FillDataGrid();

try
{
coninv = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Inventur.mdb");  
OleDbDataAdapter adapterinv = new OleDbDataAdapter(sqlinv, coninv);
dsinv = new DataSet();
coninv.Open();
adapterinv.Fill(dsinv);
coninv.Close();
dataGrid.DataSource = dsinv.Tables;

dataGrid.Font = new Font("Verdana", 8);  
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}

dataGrid.CaptionText = "Inventar";  
}

Alle Abfragen funktionieren, solange nicht gedruckt wird. Nachdem Drucken der Tabelle Inventar werdem bei der Abfrage Inventar + Raum nur noch die 4 Spalten angezeigt (Raum fehlt) und in der Abfrage Raum wird entweder nichts mehr oder nur die Spalte Raum angezeigt.

Das DataSet enthält jedoch die richtigen Werte, schreibt sie jedoch nicht ins Datagrid. Vor dem Drucken werden alle Ergebnisse korrekt angezeigt.

Hinweis:
  • Ich verwende ein DataGrid und kein DataGridView
  • Ein DataGridView kann nicht an die Druckerklasse übergeben werden.

Kann mir irgendjemand sagen, wo mein Fehler liegt?

Vielen Dank im vorraus.

Gruß Steffen

##Edit: Format angepasst

Content-Key: 99125

Url: https://administrator.de/contentid/99125

Printed on: April 25, 2024 at 12:04 o'clock

Member: Beowolf
Beowolf Oct 21, 2008 at 07:08:38 (UTC)
Goto Top
Hallo Zusammen,

Vielen Dank an alle.
Ich habe es hinbekommen, das Zauberwort heißt TableStyles.
Für alle die mal vor dem selben Problem stehen:
Bei Abfragen unterschiedlicher Tabellen und Spalten werden im Datagrid die Tablestyles angepasst. Bei einer Abfrage einer neuen Spalte ist diese nicht im tableStyle enthalten und wird somit nicht angezeigt.
Ein
dataGrid.TableStyles.Clear();
vor jeder Abfrage behebt das Problem, da die TableStyles jedesmal neu geschrieben werden

Gruß Steffen