public Aufkleber LadeAufkleber(int iId) { Aufkleber aufkleber = new Aufkleber(); using (SqlConnection con = new SqlConnection(_connectionString)) { con.Open(); String sql = "SELECT art.sBezeichnung, mod.sBezeichnung,gro.rGroesse, mod.bSymbolBild, mod.sGeschlecht, fab.sBezeichnung FROM Aufkleber.Artikel_art as art " + "Inner join Aufkleber.Modell_mod as mod On mod.iId = art.mod_iId " + "inner join Aufkleber.Groesse_gro as gro on art.gro_iId = gro.iId " + "inner join Aufkleber.Farbe_fab as fab on fab.iId = art.fab_iId " + "WHERE art.iId = @p1"; SqlCommand cmd = new SqlCommand(sql, con); cmd.Parameters.AddWithValue("@p1", iId); using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { string artbezeichnung = (!reader.IsDBNull(0) ? reader.GetString(0) : null);; // Nullable string modbezeichnung = reader.GetString(1); decimal groesseD = reader.GetDecimal(2); byte[] bSymbolbild = null; // Nullable if (!reader.IsDBNull(3)) { int buffersize = 65536; // 2^16 int arrayoffset = 0; bSymbolbild = new byte[buffersize]; long nbytesreturned = 0; long dataoffset = 0; nbytesreturned = reader.GetBytes(3, dataoffset, bSymbolbild, arrayoffset, buffersize); while (nbytesreturned == buffersize) { dataoffset += buffersize; arrayoffset += buffersize; Array.Resize(ref bSymbolbild, bSymbolbild.Length + buffersize); nbytesreturned = reader.GetBytes(3, dataoffset, bSymbolbild, arrayoffset, buffersize); } Array.Resize(ref bSymbolbild, bSymbolbild.Length - (buffersize - (int)nbytesreturned)); } string geschlechtS = reader.GetString(4); string farbe = reader.GetString(5); char[] geschlecht = geschlechtS.ToCharArray(); aufkleber = (new Aufkleber(artbezeichnung, modbezeichnung, groesseD, bSymbolbild, geschlecht[0], farbe)); } } con.Close(); } return(aufkleber); }
internal void GenerateFixedDocument(List <Artikel_art> liste, int zahl) { bool ok; // Parse int anzahldavor = 0; // anzahl der Aufkeber die ausgelassen werden sollen int aufkleberanzahl = 12; // Anzahl der zu druckenden Aufkleber pro Blatt #region Positionen frei lassen if (uiTBAnzahlDavor.Text.Trim() != "") // Wenn das Feld nicht leer gelassen wurde { ok = int.TryParse(uiTBAnzahlDavor.Text, out anzahldavor); // Dann Parses if (!ok || anzahldavor > aufkleberanzahl - 1) // Prüfen ob eine gültige Zahl übergeben wurde { MessageBox.Show("Anzahl der davor gedruckten Aufkleber ist keine gültige Zahl [1 bis " + (aufkleberanzahl - 1) + "]", "Druckfehler"); return; } // Dann Fälle abprüfen, um die ausgellassen Positionen hinzuzufügen // Davor gedruckte Anzahl < als die vorherig eingetragene if (aufklebeberdavor > anzahldavor) { _idListe.RemoveRange(0, aufklebeberdavor); aufklebeberdavor = 0; for (int i = 0; i < anzahldavor; i++) { _idListe.Insert(i, null); aufklebeberdavor = anzahldavor; } } // Davor gedruckte Anzahl > als die vorherig eingetragene else { for (int i = 0; i < anzahldavor; i++) { if (_idListe.Count() < anzahldavor || _idListe[i] != null) { _idListe.Insert(i, null); } aufklebeberdavor = anzahldavor; } } } // Wenn das Feld "" ist // davor gedruckte Anzahl wird zurückgesetzt else if (aufklebeberdavor > 0) { _idListe.RemoveRange(0, aufklebeberdavor); aufklebeberdavor = 0; } #endregion Positionen frei lassen #region Artikel2Id // Id von übergebenen Artikeln wird gesammelt //int zahl = 1000; if (liste != null) { rmanzahl.Add(0); foreach (var item in liste) { if (item.iId != null) { int?[] zwischen = new int?[2]; rmanzahl[rmanzahl.Count() - 1]++; int?id = item.iId; if (id != null) { zwischen[0] = id; zwischen[1] = zahl; _idListe.Add(zwischen); } } } } #endregion Artikel2Id // Wenn Aufkleber zum Drucken da sind if (_idListe.Count() != 0) { #region Id2Aufkleber List <Aufkleber> array = new List <Aufkleber>(); for (int i = 0; i < _idListe.Count(); i++) { if (_idListe[i] != null) { int?[] zwischen = new int?[2]; zwischen = _idListe[i]; if (zwischen[0] != null) { _db = new Database(); if (zwischen[1] > 1) { Aufkleber aZwischen = _db.LadeAufkleber((int)zwischen[0]); for (int j = 0; j < zwischen[1]; j++) { array.Add(aZwischen); } } else { array.Add(_db.LadeAufkleber((int)zwischen[0])); // Aufkleber Array wird aus DB geladen } } } else { array.Add(null); // freier Platz (bereits gedruckte Aufkleber) } } #endregion Id2Aufkleber #region Dokument mit Aufklebern erstellen // Dokument erstellen uiDocumentViewer.FitToMaxPagesAcross(1); Size pagesize = new Size(Cm2Dip(21), Cm2Dip(29.7)); // DIN A4 FixedDocument document = new FixedDocument(); document.DocumentPaginator.PageSize = pagesize; double oben; double links; int counter; decimal seiten; seiten = ((decimal)array.Count()) / ((decimal)aufkleberanzahl); int stellearray = 0; int maxarray = aufkleberanzahl; // Seiten mit Aufklebern hinzufügen for (int i = 0; i < seiten; i++) { oben = 0.0; links = 0.75; counter = 1; // Neue Seite FixedPage page1 = new FixedPage { Width = document.DocumentPaginator.PageSize.Width, Height = document.DocumentPaginator.PageSize.Height }; // Neuer Aufkleber for (int j = stellearray; j < maxarray && j < array.Count(); j++) { // Nur wenn der Aufkleber nicht ausgelassen werden soll if (array[j] != null) { UcAufkleber p1e1 = new UcAufkleber(); p1e1.DataContext = array[j]; p1e1.Margin = new Thickness(Cm2Dip(links), Cm2Dip(oben), 0, 0); p1e1.Width = Cm2Dip(9); p1e1.Height = Cm2Dip(4.5); page1.Children.Add(p1e1); } // Position des nächsten Aufklebers festlegen if (counter == 2) { counter = 1; oben += 4.5; links = 0.75; } else { counter++; links += 9.75; } } // Inhalt zur Seite hinzufügen PageContent page3Content = new PageContent(); ((IAddChild)page3Content).AddChild(page1); document.Pages.Add(page3Content); stellearray += aufkleberanzahl; maxarray += aufkleberanzahl; } // Dokument erstellen uiDocumentViewer.Document = document; #endregion Dokument mit Aufklebern erstellen } }