|
[ vbl14 @ 19.05.2014. 07:50 ] @
| Pozdrav svima..
Zamolio bih sve iskusnije programere ako mogu da mi pomognu, relativno sam nov u VBu i zavrsio sam svoj prvi program (aplikaciju), koja sada to sto odradi i prikazuje u datagrid viewu, isto treba i da otprinta na A4 Landscape, te ako znate bilo bi dobro da mi pojasnite kako iste podatke da snimim i u excelovom fajlu, ali print je prioritet za sada, jer mi je hitno potrebno...
Prilozicu dio koda koji se odnosi na print i koji printa, ali ima gresaka (ne znam koje su), jer kada prvi put iz aplikacije pokrenem print printa sve ok s tim sto ne povlaci zadnji uneseni rezultat.... Nakon toga nista ne moram raditi samo opet pokrenuti print opciju i tada printa sve rezultate, ali ne printa header tabela, nazive kolona, vec izbaci samo rezultate.... Medjutim ako lista ima vise unosa i prelazi na drugi list papira, u tom slucaju na prvom listu prikazuje samo rezultate bez headera, a na ostalim listovima prikazuje sve i nazive kolna, kao i rezultate...
Meni je potrebno da povlaci sve rezultate, i da na svakom listu prvo ide naziv kolona (header) pa ispot rezultati... Jos jedna napomena, prilaz u dgridu se ne snima u access jer mi je potrebna prazna tabela prilkom novog pokretanja... ti podaci kasnije ne trebaju u toj aplikaciji.. (ovo kazem ako mozda ima neke veze sa problemom, mada nebi trebalo da je do toga)...
Unaprijed Vam se zahvaljujem i nadam se sto brzoj pomoci...
********************
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
'Formatiranje datagrida
With DataGridView1
Dim fmt As StringFormat = New StringFormat(StringFormatFlags.LineLimit)
fmt.LineAlignment = StringAlignment.Center
fmt.Trimming = StringTrimming.EllipsisCharacter
'Format Headera
Dim prFont As New Font("Verdana", 22, GraphicsUnit.Point)
Dim siFont As New Font("Verdana", 9, GraphicsUnit.Point)
Dim hdrFont As New Font("Verdana", 10, FontStyle.Bold)
Dim y As Single = e.MarginBounds.Top
Dim strInfo As String
'uslovna promenjiva
If PrintDocument1.DefaultPageSettings.Landscape Then
strInfo = "Kupac: " & kupaclista.Text & " // Datum dolaska upita: " & DateTimePicker1.Text & " // Broj upita: " & brojupita.Text
e.Graphics.DrawString(vbTab & "" & "", prFont, Brushes.Black, 60, 40)
e.Graphics.DrawString(strInfo, siFont, Brushes.Black, 110, 80)
PrintPreviewDialog1.Document = PrintDocument1
PrintDocument1.DefaultPageSettings.Margins.Left = 20
PrintDocument1.DefaultPageSettings.Margins.Right = 20
PrintDocument1.DefaultPageSettings.Margins.Top = 40
PrintDocument1.DefaultPageSettings.Margins.Bottom = 20
y = 120
Else
MsgBox("Ovaj prozor se pojavljuje kada odustanete od štampanja ili u slučaju da niste u opcijama čekirali 'Landscape'. U lijevom dijelu ekrana zaustavite štampanje klikom na 'Cancel', a zatim u ovom prozoru potvrdite klikom na 'OK'. Prilikom novog pokušaja štampanja potrebno je da u opcijama čekirate 'Landscape'.")
End If
'format hedera datagrida
Do While mRow < .RowCount
Dim row As DataGridViewRow = .Rows(mRow)
Dim x As Single = e.MarginBounds.Left
Dim h As Single = 0
For Each cell As DataGridViewCell In row.Cells
Dim rc As RectangleF = New RectangleF(x, y, cell.Size.Width, cell.Size.Height)
'Format pravougaonika
e.Graphics.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width, rc.Height)
If (newpage) Then
'Format headera
e.Graphics.DrawString(DataGridView1.Columns(cell.ColumnIndex).HeaderText, .Font, Brushes.Red, rc, fmt)
Else
'Format Tabele
e.Graphics.DrawString(DataGridView1.Rows(cell.RowIndex).Cells(cell.ColumnIndex).FormattedValue.ToString(), .Font, Brushes.Blue, rc, fmt)
End If
'Brojanje redova
x += rc.Width
h = Math.Max(h, rc.Height)
Next
newpage = False
y += h
mRow += 1
If y + h > e.MarginBounds.Bottom Then
e.HasMorePages = True
mRow -= 1
newpage = True
Exit Sub
End If
Loop
mRow = 0
End With
*****************************
Private Sub btnstampanje_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnstampanje.Click
'dugme za stampanje liste
DataGridView1.Update()
PrintPreviewDialog1.Update()
PrintDialog1.Document = PrintDocument1
PrintDialog1.ShowDialog()
PrintDocument1.Print()
End Sub
***************************** |
[ vbl14 @ 19.05.2014. 07:55 ] @
Jos da dodam...
Na youtube sam trazio i pronasao tutorijal koji bi meni mogao pomoci, ali u mom visual studiu koji koristim (2010) nema te opcije, a ona bi bila rjesenje i za print i snimanje u excelovom fajlu. Link: https://www.youtube.com/watch?v=l1k37cfdd8w
[ PeleZr @ 19.05.2014. 09:02 ] @
Sto se tice stampe header -a, verovatno ne resetujes promenjivu newPage. Mislim da je problem u tome sto si je deklarisao u konstruktoru, ili gde vec na true, ona se posle prvog stampanja postavi na false, a kasnije je ne vracas na true i to je po mom misljenju razlog zbog kojeg nemas header -a na prvoj stranici.
[ vbl14 @ 19.05.2014. 09:24 ] @
Pozdrav Igore, dali imate vremena i ako ste voljni, da Vam posaljem kompletnu aplikaciju pa da pogledate, ja pokusavam ali uzaludno...
Isto me buni kada recimo prvi put pokrenem print preview i drugi put ne pookazuje mi isto tabelu... (a sta god se desava u printpreviewu tako isto bude i na listu papira)
[ vbl14 @ 20.05.2014. 06:07 ] @
Zar nitko nema na forumu ko bi mi mogao pomoci? Znate li bar mjesto gdje mogu poronaci pomoc? Dosta sam googlao, ima tu stvari ali nisam nikako uspjeo prilagoditi svojoj aplikaciji....
[ vbl14 @ 20.05.2014. 07:25 ] @
Mozete se javiti i putem emaila, za rjesenje kompletnog problema (ispis da radi kako treba i snimanje u excelovom fajlu) slijedi pristojna naknada.
[ PeleZr @ 20.05.2014. 10:36 ] @
Pretpostavljam da si kod preuzeo odavde, pogledaj odgovor pod rednim brojem 4 mozda ti pomogne.
Ili postavi kod kompletne klase (koristi code tag), pa mozda neko i nadje gresku
[ vbl14 @ 20.05.2014. 15:28 ] @
Ne nego sa: http://stackoverflow.com/quest...on-visual-basicaccess-database
a evo i kod moje aplikacije>
Code:
Public Class Form1
Dim materijalkg As Double
Dim KMmaterijal As Double
Dim KMukupno As Double
Dim sjec As Double
Dim brus As Double
Dim kon As Double
Dim var As Double
Dim eroz As Double
Dim pak As Double
Dim glodvm10 As Double
Dim glodvm42 As Double
Dim glodvm84 As Double
Dim glodborv As Double
Dim glodhele As Double
Dim glod5osn As Double
Dim termobr As Double
Dim brun As Double
Dim cin As Double
Dim farb As Double
Dim strhur As Double
Dim strmon As Double
Dim ost As Double
Dim mRow As Integer = 0
Dim newpage As Boolean = True
Dim pi As Double
Dim prec As Double
Dim h As Double
Dim zap As Double
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'DatabaseDataSet1.lista' table. You can move, or remove it, as needed.
Me.ListaTableAdapter1.Fill(Me.DatabaseDataSet1.lista)
ListaBindingSource1.AddNew()
End Sub
Private Sub ZatvoriProgramToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ZatvoriProgramToolStripMenuItem.Click
'Izlaz iz programa
End
End Sub
Private Sub btnKalkulacija_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnKalkulacija.Click
'Pocetak koda koji izracunava ukupnu tezinu i cijenu neobradjenog materijala
If valjak.Checked = True And listamaterijala.Text = "Plastika" Then
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
materijalkg = zap * 0.00000112
KMmaterijal = materijalkg * 12
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "Plastika" Then
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.00000112
ukmatkg.Text = materijalkg
KMmaterijal = materijalkg * 12
cijenamaterijala.Text = KMmaterijal
End If
If valjak.Checked = True And listamaterijala.Text = "ST-37/52 željezo" Then
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
materijalkg = zap * 0.00000787
KMmaterijal = materijalkg * 1
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "ST-37/52 željezo" Then
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.00000787
ukmatkg.Text = materijalkg
KMmaterijal = materijalkg * 1
cijenamaterijala.Text = KMmaterijal
End If
If valjak.Checked = True And listamaterijala.Text = "16 Mn CR5 željezo" Then
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
materijalkg = zap * 0.00000787
KMmaterijal = materijalkg * 3
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "16 Mn CR5 željezo" Then
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.00000787
ukmatkg.Text = materijalkg
KMmaterijal = materijalkg * 3
cijenamaterijala.Text = KMmaterijal
End If
If valjak.Checked = True And listamaterijala.Text = "Aluminij" Then
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
materijalkg = zap * 0.00000277
KMmaterijal = materijalkg * 6
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "Aluminij" Then
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.00000277
ukmatkg.Text = materijalkg
KMmaterijal = materijalkg * 6
cijenamaterijala.Text = KMmaterijal
End If
'Kraj koda koji izracunava ukupnu tezinu i cijenu neobradjenog materijala
'Pocetak koda koji prazna polja definise kao 0 vrijednost
If sjecenje.Text = "" Then
sjecenje.Text = "0"
End If
If glodanjevm10.Text = "" Then
glodanjevm10.Text = "0"
End If
If glodanjevm42.Text = "" Then
glodanjevm42.Text = "0"
End If
If glodanjevm84.Text = "" Then
glodanjevm84.Text = "0"
End If
If glodanjeborver.Text = "" Then
glodanjeborver.Text = "0"
End If
If glodanje5osne.Text = "" Then
glodanje5osne.Text = "0"
End If
If glodanjeheler.Text = "" Then
glodanjeheler.Text = "0"
End If
If struganjehurco.Text = "" Then
struganjehurco.Text = "0"
End If
If struganjemonfors.Text = "" Then
struganjemonfors.Text = "0"
End If
If varenje.Text = "" Then
varenje.Text = "0"
End If
If erozimat.Text = "" Then
erozimat.Text = "0"
End If
If brusenje.Text = "" Then
brusenje.Text = "0"
End If
If termobrada.Text = "" Then
termobrada.Text = "0"
End If
If brunir.Text = "" Then
brunir.Text = "0"
End If
If cink.Text = "" Then
cink.Text = "0"
End If
If farbanje.Text = "" Then
farbanje.Text = "0"
End If
If kontrola.Text = "" Then
kontrola.Text = "0"
End If
If pakiranje.Text = "" Then
pakiranje.Text = "0"
End If
If ostalo.Text = "" Then
ostalo.Text = "0"
End If
If precnik.Text = "" Then
precnik.Text = "0"
End If
If visina.Text = "" Then
visina.Text = "0"
End If
'Kraj koda koji prazna polja definise kao 0 vrijednost
'Pocetak koda koji uracunava rad u ukupnu cijenu pozicije
sjec = sjecenje.Text * 0.25
brus = brusenje.Text * 1
kon = kontrola.Text * 0.33
var = varenje.Text * 0.5
eroz = erozimat.Text * 0.41
pak = pakiranje.Text * 0.25
glodvm10 = glodanjevm10.Text * 0.41
glodvm42 = glodanjevm42.Text * 0.83
glodvm84 = glodanjevm84.Text * 0.66
glodborv = glodanjeborver.Text * 1
glodhele = glodanjeheler.Text * 1
glod5osn = glodanje5osne.Text * 0.5
strhur = struganjehurco.Text * 0.41
strmon = struganjemonfors.Text * 0.5
termobr = termobrada.Text * 4
brun = brunir.Text * 1.5
cin = cink.Text * 0.8
farb = farbanje.Text * 1.5
ost = ostalo.Text
KMukupno = KMmaterijal + sjec + brus + kon + var + eroz + pak + ost + glodvm10 + glodvm42 + glodvm84 + glodborv + glodhele + glod5osn + strhur + strmon + termobr + brun + cin + farb
ukupnacijena.Text = KMukupno
'Kraj koda koji uracunaca rad u ukupnu cijenu pozicije
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Pocetak # dodavanje pozicije u listu i priprema za unos nove pozicije
ListaBindingSource1.AddNew()
dimenzije1.Text = "0"
dimenzije2.Text = "0"
dimenzije3.Text = "0"
'Kraj # dodavanje pozicije u listu i priprema za unos nove pozicije
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'Brisanje pozicije iz liste
ListaBindingSource1.RemoveCurrent()
End Sub
Private Sub OProgramuToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OProgramuToolStripMenuItem.Click
'Prikaz prozora "o programu"
Form2.Show()
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
'Formatiranje datagrida
With DataGridView1
Dim fmt As StringFormat = New StringFormat(StringFormatFlags.LineLimit)
fmt.LineAlignment = StringAlignment.Center
fmt.Trimming = StringTrimming.EllipsisCharacter
'Format Headera
Dim prFont As New Font("Verdana", 22, GraphicsUnit.Point)
Dim siFont As New Font("Verdana", 9, GraphicsUnit.Point)
Dim hdrFont As New Font("Verdana", 10, FontStyle.Bold)
Dim y As Single = e.MarginBounds.Top
Dim strInfo As String
'Uslovna promenjiva
If PrintDocument1.DefaultPageSettings.Landscape Then
strInfo = "Kupac: " & kupaclista.Text & " // Datum dolaska upita: " & DateTimePicker1.Text & " // Broj upita: " & brojupita.Text
e.Graphics.DrawString(vbTab & "" & "", prFont, Brushes.Black, 60, 40)
e.Graphics.DrawString(strInfo, siFont, Brushes.Black, 110, 80)
PrintPreviewDialog1.Document = PrintDocument1
PrintDocument1.DefaultPageSettings.Margins.Left = 50
PrintDocument1.DefaultPageSettings.Margins.Right = 50
PrintDocument1.DefaultPageSettings.Margins.Top = 30
PrintDocument1.DefaultPageSettings.Margins.Bottom = 30
y = 120
Else
MsgBox("Ovaj prozor se pojavljuje kada odustanete od štampanja ili u slučaju da niste u opcijama čekirali 'Landscape'. U lijevom dijelu ekrana zaustavite štampanje klikom na 'Cancel', a zatim u ovom prozoru potvrdite klikom na 'OK'. Prilikom novog pokušaja štampanja potrebno je da u opcijama čekirate 'Landscape'.")
End If
'Format hedera datagrida
Do While mRow < .RowCount
Dim row As DataGridViewRow = .Rows(mRow)
Dim x As Single = e.MarginBounds.Left
Dim h As Single = 0
For Each cell As DataGridViewCell In row.Cells
Dim rc As RectangleF = New RectangleF(x, y, cell.Size.Width, cell.Size.Height)
'Format pravougaonika
e.Graphics.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width, rc.Height)
If (newpage) Then
'Format headera
e.Graphics.DrawString(DataGridView1.Columns(cell.ColumnIndex).HeaderText, .Font, Brushes.Black, rc, fmt)
Else
'Format Tabele
e.Graphics.DrawString(DataGridView1.Rows(cell.RowIndex).Cells(cell.ColumnIndex).FormattedValue.ToString(), .Font, Brushes.Black, rc, fmt)
End If
'Brojanje redova
x += rc.Width
h = Math.Max(h, rc.Height)
Next
newpage = False
y += h
mRow += 1
If y + h > e.MarginBounds.Bottom Then
e.HasMorePages = True
mRow -= 1
newpage = True
Exit Sub
End If
Loop
mRow = 0
End With
End Sub
Private Sub ŠtampanjeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ŠtampanjeToolStripMenuItem.Click
'Stampanje odabirom stavke iz menija "opcije"
DataGridView1.Update()
PrintPreviewDialog1.Update()
PrintDialog1.Document = PrintDocument1
PrintDialog1.ShowDialog()
PrintDocument1.Print()
End Sub
Private Sub NovaListaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NovaListaToolStripMenuItem.Click
'Pokretanje novog upita
DatabaseDataSet1.Clear()
kupaclista.Text = ""
brojupita.Text = ""
DateTimePicker1.Text = ""
dimenzije1.Text = "0"
dimenzije2.Text = "0"
dimenzije3.Text = "0"
ListaBindingSource1.AddNew()
End Sub
Private Sub PregledDokumentaPrijeŠtampanjaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PregledDokumentaPrijeŠtampanjaToolStripMenuItem.Click
'Pregled dokumenta prije stampanja
DataGridView1.Update()
PrintPreviewDialog1.Update()
PrintDocument1.DefaultPageSettings.Landscape = True
PrintPreviewDialog1.Document = PrintDocument1
PrintPreviewDialog1.ShowDialog()
End Sub
End Class
[ PeleZr @ 20.05.2014. 20:53 ] @
Probaj da na pocetku metode ŠtampanjeToolStripMenuItem_Click dodas
Code: mRow = 0
newPage = true
koliko sam na brzinu pregledao, cini mi se da ne resetujes te dve promenljive na pocetku stampanja. Za sada nisam primetio nikakvu drugu gresku, a nemam trenutno ni gde da isprobam
[ vbl14 @ 21.05.2014. 06:14 ] @
Bravo! To je to.. kada je u pitanju povlacenje headera, sada ide uvijek, ali i dalje prvi rezultat u datagridu ne printa? (Ja sam to rijesio tako sto sam u prvi red unjeo i snimo neke bezveze podatke, i ono onda printa dalje sve ispod tog prvog reda...) Volio bi da to sve malo usminkam, da ne bude ovako kao sada 'skarabudjeno'...
Jos jedno pitanje, posto ima dosta kolona i u punim nazivima ne moze da stane na A4 Landscape, pa kolone mora smanjiti i skraceno pisati nazive headera... To sam uradio u podesavanju datagrida preko forme (nista u kodu nije pisano), ali me zanima da li mogu da to uradim preko koda, kako bi u programu ostalo normalno, puni nazivi da bude pregledno, a kada se printa da povlaci te suzene kolone... Ovako mi je smanjilo i pregled u programu pa to sada djeluje zbijeno i ruzno (za mene)...
PeleZr, hvala puno.
[ PeleZr @ 21.05.2014. 09:42 ] @
Hehe, ja sam kontao da ti ne stampa poslednji red :) Sad vidim u cemu je problem.
U metodi PrintDocument1_PrintPage imas mRow += 1, i kada stampas heder ti povecas redni broj vrste i zato ti preskoci prvu vrstu.
mRow += 1 premestis iznad newPage = false, a posle nexta i dodas jedan if, i to bi trebalo da resi probllem
ovako nesto:
Code:
if(newPage = true) then
mRow + =1
end if
Sto se tice skracivanja header -a, mozes da resis i kroz kod, pogledaj String Split i String builder
[ vbl14 @ 21.05.2014. 11:46 ] @
Eh sad... izvinjavam se sto se stalno cimas, ali sada sam pronasao jos tih zackoljica...
Najvise me buni sto je to jedno vrijene jutros sljakalo... ja sam malo cackao i evo opet sam negdje zeznuo... Sada cu pokusati dodati ovaj dio koda sto si poslao.... ali bez toga sam rjesio na nacin sto kada starta program dodao sam dva puta ListaBindingSource1.AddNew()
Prvi red nije morao imati rezultate jer ono prikaze prazan prostor i upisuje od drugog, tako kada prilikom stampe preskoci prvi red bude OK.
Header na odabir opcije print iz menija koja pokrece print dialog printa i sve se vidi... Problem je u tome sto kada pokrenem printpreview u kojem sve izgleda kako treba ali kada u okviru njega odaberem opciju print ostampa opet bez headera (zapravo ne kao prije da ga ne uzme nego kolone iscrta ali budu prazne, dole rezultati dolaze kako treba)...
Ima tu jos stvari recimo kada pokrenem print dialog, i sda hocu odustati od stampanja, ono bez obzira kliknuo ja na dugme ok ili cancel odstampa dokument... vjerovartno jer sam na buton koji pokrece print dialog na kraju stavio: PrintDocument1.Print()
ali ako taj dio koda maknem onda kada pokrene print prozor i kliknem na ok da printa nista se ne desava...
I dalje mi nije isto kod pokretanja printa i printpreviewa prvi i drugi put... prvi put list i tabela sve bude vise ulijevo dok drugi put ode desno na papiru, dok bi htjeo kad god da pokrenem te opcije bude sve isto....
Tesko mi je sve objasniti, mislim da bi najlakse bilo da uploadujem aplikaciju i posaljem na mail... medjutim ne mogu jer sam tek reg. na forum, ako nije problem da mi se samo javis na moj mail kako bi mogao da ti proslijedim aplikaciju... nema ovo smisla hehe potrosio sam oko 50tak (samo jutros) listova testirajuci.... a ova ce mi opcija uvjek skoro biti potrebna... volio bi da to postimam kako treba da radi bez greske... Koliko ja mogu da vidim Vama to nije neki posao dok meni djeluje ne rjesivo... tek ucim.. :)
[ vbl14 @ 21.05.2014. 11:59 ] @
mislim na ovo... u drugom otvaranju sve bude ok a u prvom sve bjezi desno.. a kada sad ovu zaokruzenu opciju kliknem stampa tako ali bez naslova headera samo budu prazne kockice....

[ PeleZr @ 21.05.2014. 15:58 ] @
Trenutno nemam instaliran vb ni na jednoj masini, niti vremena za pisanje app, samo pokusavam da ti pomognem i dam neke smernice, a i ti ces pre nauciti na greskama.
Trebalo bi malo vise da obratis paznju na dokumentaciju, pogledaj ovde, imas u primeru DialogResult.
Moras i u print preview metodi da resetujes parametre za broj vrste i newPage, kao sto si radio i za print dugme.
I nema potrebe da testiras stampanje na papiru, instaliraj neki pdf creator pa testiraj stampanje u pdf :)
[ marockee @ 22.05.2014. 04:18 ] @
a Crystal Reports da probaš?
[ S A J A @ 22.05.2014. 08:37 ] @
Citat: marockee: a Crystal Reports da probaš?
Takođe ima i Microsoft Reporting koji je ugrađen u Visual Studio. Ja ga koristim i prilično je dobar, nije komplikovan a ima sve osnovne stvari. Probao sam Crystal i Telerik Reports ali nekako mi je to sve previše komplikovano, verujem da su dosta moćniji ali meni trebaju samo osnovne stvari.
Evo info: http://msdn.microsoft.com/en-us/library/bb558708.aspx
Ako tu bude bilo nekih pitanja, mogao bi da pomognem. Grid nikada nisam bacao na štampu, nekako mi je logično da se grid baca u excel a da se za štampu koristi reporting.
[ vbl14 @ 22.05.2014. 09:28 ] @
Ok, prije svega hvala Vam sto ste se ukljucili da mi pomognete... Prvu verziju programa sam prebacio sefu i on je zadovoljan, jer radi ono sto treba, medjutim sada bi trebalo ove stvari srediti da ne bude onako kako sam ja to pokrpio..
Prije svega kod aplikacije koja nije isporucena sefu i koju zelim da sredim... Potrudio sam da sto bolje dokumentujem i objasnim dijelove koda.
Code: Public Class Form1
Dim materijalkg As Double
Dim KMmaterijal As Double
Dim KMukupno As Double
Dim sjec As Double
Dim brus As Double
Dim kon As Double
Dim var As Double
Dim eroz As Double
Dim pak As Double
Dim glodvm10 As Double
Dim glodvm42 As Double
Dim glodvm84 As Double
Dim glodborv As Double
Dim glodhele As Double
Dim glod5osn As Double
Dim termobr As Double
Dim brun As Double
Dim cin As Double
Dim farb As Double
Dim strhur As Double
Dim strmon As Double
Dim ost As Double
Dim mRow As Integer = 0
Dim newpage As Boolean = True
Dim pi As Double
Dim prec As Double
Dim h As Double
Dim zap As Double
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: This line of code loads data into the 'DatabaseDataSet2.lista' table. You can move, or remove it, as needed.
Me.ListaTableAdapter.Fill(Me.DatabaseDataSet2.lista)
ListaBindingSource.AddNew() ' Ovaj dio koda automatski nakon startanja programa omogucuje unos nove pozicije
End Sub
Private Sub ZatvoriProgramToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ZatvoriProgramToolStripMenuItem.Click
End ' Klikom na opciju #Zatvori program, u meniju program se zatvara
End Sub
Private Sub btnKalkulacija_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnKalkulacija.Click
' Kod koji izracunava ukupnu tezinu i cijenu neobradjenog materijala pozicije
If valjak.Checked = True And listamaterijala.Text = "Plastika" Then
' Ako se radi o valjkastoj poziciji, nakon cekiranja polja ispred rubrika za precnik i visinu, program ce koristiti sljedecu formulu ukoliko je iz liste materijala odabrana #Plastika
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
' Ovaj dio koda ce zapreminu pomnoziti sa specificnom gustocom #Plastike, sa cime dobijamo ukupnu tezinu potrebnog sirovog materijala za izradu pozicije. Nakon toga potrebni materijal mnozi sa cijenom #Plastike po kg
materijalkg = zap * 0.0000014
KMmaterijal = materijalkg * 12
' Dobijeni rezultati se prikazuju u poljima #Ukupno materijala (kg) i #Ukupna cijena materijala (EUR)
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "Plastika" Then
' Ako se ne radi o valjkastim pozicijama tada se u rubrike #Visina, #Sirina i #Duzina upisuju dimenzije pozicije, a u rubrike #Precnik i #Visina se ne upisuje nista i ne cekira se polje ispred tih rubrika, kako bi ih program izostavio iz obracuna
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.0000014 ' Formula za ukupnu kilazu potrebnog materijala
ukmatkg.Text = materijalkg 'Prikazivanje ukupno potrebnog materijala u polju #Ukupno materijala (kg)
' Kod koji ce potrebni materijal pomnoziti sa cijenom materijala po kg i prikazati u polju #Cijena materijala (EUR)
KMmaterijal = materijalkg * 12
cijenamaterijala.Text = KMmaterijal
End If
If valjak.Checked = True And listamaterijala.Text = "ST-37/52 željezo" Then
' Ako se radi o valjkastoj poziciji, nakon cekiranja polja ispred rubrika za precnik i visinu, program ce koristiti sljedecu formulu ukoliko je iz liste materijala odabrana #ST-37/52 željezo
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
' Ovaj dio koda ce zapreminu pomnoziti sa specificnom gustocom #Zeljeza, sa cime dobijamo ukupnu tezinu potrebnog sirovog materijala za izradu pozicije. Nakon toga potrebni materijal mnozi sa cijenom #ST-37/52 željezo po kg
materijalkg = zap * 0.00000787
KMmaterijal = materijalkg * 1
' Dobijeni rezultati se prikazuju u poljima #Ukupno materijala (kg) i #Ukupna cijena materijala (EUR)
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "ST-37/52 željezo" Then
' Ako se ne radi o valjkastim pozicijama tada se u rubrike #Visina, #Sirina i #Duzina upisuju dimenzije pozicije, a u rubrike #Precnik i #Visina se ne upisuje nista i ne cekira se polje ispred tih rubrika, kako bi ih program izostavio iz obracuna
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.00000787 ' Formula za ukupnu kilazu potrebnog materijala
ukmatkg.Text = materijalkg 'Prikazivanje ukupno potrebnog materijala u polju #Ukupno materijala (kg)
' Kod koji ce potrebni materijal pomnoziti sa cijenom materijala po kg i prikazati u polju #Cijena materijala (EUR)
KMmaterijal = materijalkg * 1
cijenamaterijala.Text = KMmaterijal
End If
If valjak.Checked = True And listamaterijala.Text = "16 Mn CR5 željezo" Then
' Ako se radi o valjkastoj poziciji, nakon cekiranja polja ispred rubrika za precnik i visinu, program ce koristiti sljedecu formulu ukoliko je iz liste materijala odabrana #16 Mn CR5 željezo
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
' Ovaj dio koda ce zapreminu pomnoziti sa specificnom gustocom #Zeljeza, sa cime dobijamo ukupnu tezinu potrebnog sirovog materijala za izradu pozicije. Nakon toga potrebni materijal mnozi sa cijenom #16 Mn CR5 željezo po kg
materijalkg = zap * 0.00000787
KMmaterijal = materijalkg * 3
' Dobijeni rezultati se prikazuju u poljima #Ukupno materijala (kg) i #Ukupna cijena materijala (EUR)
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "16 Mn CR5 željezo" Then
' Ako se ne radi o valjkastim pozicijama tada se u rubrike #Visina, #Sirina i #Duzina upisuju dimenzije pozicije, a u rubrike #Precnik i #Visina se ne upisuje nista i ne cekira se polje ispred tih rubrika, kako bi ih program izostavio iz obracuna
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.00000787 ' Formula za ukupnu kilazu potrebnog materijala
ukmatkg.Text = materijalkg 'Prikazivanje ukupno potrebnog materijala u polju #Ukupno materijala (kg)
' Kod koji ce potrebni materijal pomnoziti sa cijenom materijala po kg i prikazati u polju #Cijena materijala (EUR)
KMmaterijal = materijalkg * 3
cijenamaterijala.Text = KMmaterijal
End If
If valjak.Checked = True And listamaterijala.Text = "Aluminij" Then
' Ako se radi o valjkastoj poziciji, nakon cekiranja polja ispred rubrika za precnik i visinu, program ce koristiti sljedecu formulu ukoliko je iz liste materijala odabrana #Aluminij
pi = 3.14
h = visina.Text
prec = precnik.Text
zap = ((prec * prec) * pi / 4) * h
' Ovaj dio koda ce zapreminu pomnoziti sa specificnom gustocom #Aluminija, sa cime dobijamo ukupnu tezinu potrebnog sirovog materijala za izradu pozicije. Nakon toga potrebni materijal mnozi sa cijenom #Aluminij po kg
materijalkg = zap * 0.0000027
KMmaterijal = materijalkg * 6
' Dobijeni rezultati se prikazuju u poljima #Ukupno materijala (kg) i #Ukupna cijena materijala (EUR)
ukmatkg.Text = materijalkg
cijenamaterijala.Text = KMmaterijal
ElseIf valjak.Checked = False And listamaterijala.Text = "Aluminij" Then
' Ako se ne radi o valjkastim pozicijama tada se u rubrike #Visina, #Sirina i #Duzina upisuju dimenzije pozicije, a u rubrike #Precnik i #Visina se ne upisuje nista i ne cekira se polje ispred tih rubrika, kako bi ih program izostavio iz obracuna
materijalkg = (dimenzije1.Text * dimenzije2.Text * dimenzije3.Text) * 0.0000027 ' Formula za ukupnu kilazu potrebnog materijala
ukmatkg.Text = materijalkg 'Prikazivanje ukupno potrebnog materijala u polju #Ukupno materijala (kg)
' Kod koji ce potrebni materijal pomnoziti sa cijenom materijala po kg i prikazati u polju #Cijena materijala (EUR)
KMmaterijal = materijalkg * 6
cijenamaterijala.Text = KMmaterijal
' Kraj koda koji izracunava ukupnu tezinu i cijenu neobradjenog materijala pozicije
End If
' Pocetak koda koji prazna polja definise kao 0 vrijednost
If sjecenje.Text = "" Then
sjecenje.Text = "0"
End If
If glodanjevm10.Text = "" Then
glodanjevm10.Text = "0"
End If
If glodanjevm42.Text = "" Then
glodanjevm42.Text = "0"
End If
If glodanjevm84.Text = "" Then
glodanjevm84.Text = "0"
End If
If glodanjeborver.Text = "" Then
glodanjeborver.Text = "0"
End If
If glodanje5osne.Text = "" Then
glodanje5osne.Text = "0"
End If
If glodanjeheler.Text = "" Then
glodanjeheler.Text = "0"
End If
If struganjehurco.Text = "" Then
struganjehurco.Text = "0"
End If
If struganjemonfors.Text = "" Then
struganjemonfors.Text = "0"
End If
If varenje.Text = "" Then
varenje.Text = "0"
End If
If erozimat.Text = "" Then
erozimat.Text = "0"
End If
If brusenje.Text = "" Then
brusenje.Text = "0"
End If
If termobrada.Text = "" Then
termobrada.Text = "0"
End If
If brunir.Text = "" Then
brunir.Text = "0"
End If
If cink.Text = "" Then
cink.Text = "0"
End If
If farbanje.Text = "" Then
farbanje.Text = "0"
End If
If kontrola.Text = "" Then
kontrola.Text = "0"
End If
If pakiranje.Text = "" Then
pakiranje.Text = "0"
End If
If ostalo.Text = "" Then
ostalo.Text = "0"
End If
' Kraj koda koji prazna polja definise kao 0 vrijednost
' Pocetak koda koji uracunava rad u ukupnu cijenu pozicije
sjec = sjecenje.Text * 0.25
brus = brusenje.Text * 1
kon = kontrola.Text * 0.33
var = varenje.Text * 0.5
eroz = erozimat.Text * 0.41
pak = pakiranje.Text * 0.25
glodvm10 = glodanjevm10.Text * 0.41
glodvm42 = glodanjevm42.Text * 0.83
glodvm84 = glodanjevm84.Text * 0.66
glodborv = glodanjeborver.Text * 1
glodhele = glodanjeheler.Text * 1
glod5osn = glodanje5osne.Text * 0.5
strhur = struganjehurco.Text * 0.41
strmon = struganjemonfors.Text * 0.5
termobr = termobrada.Text * 4
brun = brunir.Text * 1.5
cin = cink.Text * 0.8
farb = farbanje.Text * 1.5
ost = ostalo.Text
KMukupno = KMmaterijal + sjec + brus + kon + var + eroz + pak + ost + glodvm10 + glodvm42 + glodvm84 + glodborv + glodhele + glod5osn + strhur + strmon + termobr + brun + cin + farb
ukupnacijena.Text = KMukupno
' Kraj koda koji uracunava rad u ukupnu cijenu pozicije
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Dodavanje pozicije u listu i priprema za unos nove pozicije
ListaBindingSource.AddNew()
dimenzije1.Text = "0"
dimenzije2.Text = "0"
dimenzije3.Text = "0"
precnik.Text = "0"
visina.Text = "0"
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
ListaBindingSource.RemoveCurrent() ' Brisanje odabrane pozicije iz liste
End Sub
Private Sub OProgramuToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OProgramuToolStripMenuItem.Click
Form2.Show() ' Odabirom iz menija opcije #O programu, prilazuje se Form-a 2
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
' Pocetak koda koji vrsi stampanje podataka prikazanih u datagridu
'Formatiranje datagrida
With DataGridView1
Dim fmt As StringFormat = New StringFormat(StringFormatFlags.LineLimit)
fmt.LineAlignment = StringAlignment.Center
fmt.Trimming = StringTrimming.EllipsisCharacter
'Format Headera
Dim prFont As New Font("Verdana", 22, GraphicsUnit.Point)
Dim siFont As New Font("Verdana", 9, GraphicsUnit.Point)
Dim hdrFont As New Font("Verdana", 10, FontStyle.Bold)
Dim y As Single = e.MarginBounds.Top
Dim strInfo As String
'uslovna promenjiva
If PrintDocument1.DefaultPageSettings.Landscape Then
strInfo = "Kupac: " & kupaclista.Text & " // Datum dolaska upita: " & DateTimePicker1.Text & " // Broj upita: " & brojupita.Text ' Podaci koji se povlace u header dokumenta
e.Graphics.DrawString(vbTab & "" & "", prFont, Brushes.Black, 60, 40)
e.Graphics.DrawString(strInfo, siFont, Brushes.Black, 110, 80)
PrintPreviewDialog1.Document = PrintDocument1
PrintDocument1.DefaultPageSettings.Margins.Left = 20
PrintDocument1.DefaultPageSettings.Margins.Right = 20
PrintDocument1.DefaultPageSettings.Margins.Top = 40
PrintDocument1.DefaultPageSettings.Margins.Bottom = 20
y = 120
ElseIf PrintDocument1.DefaultPageSettings.Landscape = False Then ' Ukoliko nije u opcijama podesen Landscape, prikazuje se poruka
Dim titleP = "Prekid štampanja"
MsgBox("Ovaj prozor se pojavljuje u slučaju da niste u opcijama čekirali 'Landscape'. U lijevom dijelu ekrana zaustavite štampanje klikom na 'Cancel', a zatim u ovom prozoru potvrdite klikom na 'OK'. Prilikom novog pokušaja štampanja potrebno je da u opcijama čekirate 'Landscape'.", , titleP)
End If
'format hedera datagrida
Do While mRow < .RowCount
Dim row As DataGridViewRow = .Rows(mRow)
Dim x As Single = e.MarginBounds.Left
Dim h As Single = 0
For Each cell As DataGridViewCell In row.Cells
Dim rc As RectangleF = New RectangleF(x, y, cell.Size.Width, cell.Size.Height)
'Format pravougaonika
e.Graphics.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width, rc.Height)
If (newpage) Then
'Format headera
e.Graphics.DrawString(DataGridView1.Columns(cell.ColumnIndex).HeaderText, .Font, Brushes.Red, rc, fmt)
Else
'Format Tabele
e.Graphics.DrawString(DataGridView1.Rows(cell.RowIndex).Cells(cell.ColumnIndex).FormattedValue.ToString(), .Font, Brushes.Blue, rc, fmt)
End If
'Brojanje redova
x += rc.Width
h = Math.Max(h, rc.Height)
Next
newpage = False
y += h
mRow += 1
If y + h > e.MarginBounds.Bottom Then
e.HasMorePages = True
mRow -= 1
newpage = True
Exit Sub
End If
Loop
mRow = 0
End With
End Sub ' Kraj koda koji vrsi stampanje podataka prikazanih u datagridu
Private Sub ŠtampanjeToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ŠtampanjeToolStripMenuItem.Click
' Opcija za stampanje dokumenta, koja se nalazi u meniju
mRow = 0
newpage = True
DataGridView1.Update()
PrintPreviewDialog1.Update()
PrintDocument1.DefaultPageSettings.Landscape = True
PrintDialog1.Document = PrintDocument1
PrintDialog1.ShowDialog()
PrintDocument1.Print()
End Sub
Private Sub NovaListaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NovaListaToolStripMenuItem.Click
' Pokretanje novog upita, opcija smjestena u meniju
' Prikaz sigurnosne poruke
Dim title = "Otvaranje novog upita"
Dim msg = "Dali želite otvoriti novi upit? Nakon otvaranja novog upita nećete biti u mogućnosti izvršiti naknadno štampanje trenutnog upita!"
Dim style = MsgBoxStyle.YesNo Or MsgBoxStyle.DefaultButton2 Or _
MsgBoxStyle.Question
Dim response = MsgBox(msg, style, title)
If response = MsgBoxResult.Yes Then ' Nastavak pokretanja novog upita poslije potvrde
DatabaseDataSet2.Clear()
kupaclista.Text = ""
brojupita.Text = ""
DateTimePicker1.Text = ""
dimenzije1.Text = "0"
dimenzije2.Text = "0"
dimenzije3.Text = "0"
precnik.Text = "0"
visina.Text = "0"
ListaBindingSource.AddNew()
Else
MsgBox("Uspješno ste odustali od otvaranja novog upita.", , title) ' Prikaz poruke u slucaju odbijanja potvrde
End If
End Sub
Private Sub PregledPrijeŠtampanjaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PregledPrijeŠtampanjaToolStripMenuItem.Click
' Pregled dokumenta prije stampanja
mRow = 0
newpage = True
PrintPreviewDialog1.Document = PrintDocument1
DataGridView1.Update()
PrintPreviewDialog1.Update()
PrintDocument1.DefaultPageSettings.Landscape = True
PrintPreviewDialog1.ShowDialog()
End Sub
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
' Vracanje na prethodnu poziciju
ListaBindingSource.MovePrevious()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
' Prelazak na sljedecu poziciju
ListaBindingSource.MoveNext()
End Sub
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
' Vracanje na prvu poziciju
ListaBindingSource.MoveFirst()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
' Prelazak na zadnju poziciju
ListaBindingSource.MoveLast()
End Sub
End Class
Evo kako to izgleda.
Dakle ovdje nisam ubacio kod koji ce odmah krenuti upisivati rezultat u drugi red kako bi prvi propustio, i sada u stampi nema prvog rezultata. Takodje ovdje kolone nisu pisane skraceno i suzavano kako bi sve stalo na jedan A4 list (zelim da u programu izgleda ovako, a na listu papira da bude prilagodjeno i nazivi upisani skraceno).
Sav kod sam licno napisao osim dijela za printanje, zato ne mogu da ga pohvatam i uredim...
Problem je kada recimo otvorim opciju print i zelim odustati od printanja, kliknem na cancel, ali ono opet odstampa, jedino ce stampanje zaustaviti ako podeim da nije landscape.
Od opcije save sam odusta, nije potrebna, jedino je ostalo ovo printanje, trebao bi ove kolone da pikazem uvijek isto, (sada prilikom prvog printa sve ode udesno, dok kod ostalih pokusaja bude centrirano na sredini lista).
Kada su u pitanju ovi reporti, nasao sam ovo: https://www.youtube.com/watch?v=l1k37cfdd8w
Medjutim kada skinem dodatak sa microsoftove stranice i instaliram, u opcijama za dodavanje dodataka udjem chose items.. ali aga tu nema i ne mogu da pokusam napraviti kao u videu jer nemam te opcije....
sada cu procitati sta sam sve naveo pa ako budem sta izostavio javicu :) hehe tesko je sve objasniti ali mislim da sam uspjeo...
[ vbl14 @ 23.05.2014. 08:14 ] @
Citat: S A J A:
Citat: marockee: a Crystal Reports da probaš?
Takođe ima i Microsoft Reporting koji je ugrađen u Visual Studio. Ja ga koristim i prilično je dobar, nije komplikovan a ima sve osnovne stvari. Probao sam Crystal i Telerik Reports ali nekako mi je to sve previše komplikovano, verujem da su dosta moćniji ali meni trebaju samo osnovne stvari.
Evo info: http://msdn.microsoft.com/en-us/library/bb558708.aspx
Ako tu bude bilo nekih pitanja, mogao bi da pomognem. Grid nikada nisam bacao na štampu, nekako mi je logično da se grid baca u excel a da se za štampu koristi reporting.
Ok.. malo sam odmorio od aplikacije, pa da nastavim... blizi mi se ispit iz VBa a i volio bi ovo rjesiti...
Zanemarimo ovaj kod do sada sto stoji za stampanje... Ako mi mozes reci od pocetka kako bi rjesio ovo sto si rekao, da grid "bacimo" (exportujemo u excel) i kako da odaradim da mi printa po tim reportima, nije mi bitno koji je postupak, nego da radi....
[ S A J A @ 23.05.2014. 09:15 ] @
Citat: vbl14: nije mi bitno koji je postupak, nego da radi....
Kod mene radi :) A evo i postupka:
Reporting
Osnova reportinga ti je ReportViewer kontrola. Ona često nije u sklopu Visual Studija nego se mora posebno instalirati. Skini "Microsoft Report Viewer 2012 Runtime" i instaliraj.
Sledeći korak je da dizajniraš report, to možeš da uradiš kroz Visual Studio, Add New Item... Report (Wizard). Ukoliko imaš Express verzije VS-a onda nemaš taj dizajner nego moraš da skineš posebnu aplikaciju za to a ona se zove Microsoft® SQL Server® 2012 Report Builder.
Kad se otvori dizajner (bez obzira koja od ove dve varijante je u pitanju) moraš da se konektuješ na bazu. Ukoliko je dizajner iz VS-a onda će ti ponuditi da se konektuješ preko Entity Framework modela a ako praviš report preko Buildera onda moraš pešice (da se konektuješ na bazu i da napraviš dataset).
Kad si to uradio, sa leve strane ćeš imati "papir" a sa desne polja koja prevlačiš na taj "papir". Ako hoćeš tabelu onda staneš na "papir", desni klik pa Inset Table. Dalje u toj tabeli definišeš šta su kolone a šta podaci.
Kad završiš sa dizajniranjem, rezultat ti je .rdlc fajl koji treba da staviš unutar projekta (osim ako si radio preko VS dizajnera kada je fajl već unutar projekta).
Posle uzmeš neku formu, na nju staviš ReportViewer kontrolu i u Load proceduru staviš sledeći kod:
Prvo moraš report da napuniš podacima.
Ako koristiš EntityFramework onda bi to izgledalo otprilike ovako:
Code: Dim query = From nal In RadFormMain.db.Nalozi
Where
nal.Doktori.Ime = "Mika"
Select
nal.BrojNaloga,
nal.ImeKlijenta,
Adresa = nal.AdresaKlijenta,
Kontakt = nal.KontaktKlijenta,
nal.DatumPrijema,
nal.DatumIzdavanja,
Doktori = nal.Doktori.Ime,
Status = nal.Statusi.Naziv,
NPL = nal.NaciniPlacanja.Naziv,
nal.Iznos
ReportBindingSource.DataSource = query.ToList
A ako koritiš direktan pristup bazi onda otprilike ovako:
Code: Dim con As New SqlClient.SqlConnection(MDIParent1.db.Database.Connection.ConnectionString)
con.Open()
Dim da As New SqlClient.SqlDataAdapter(<SQL>SELECT
SalesLT.Product.Name AS [Product Name]
,SalesLT.Product.Color
,SalesLT.Product.[Size]
,SalesLT.ProductCategory.Name AS [ProductCategory Name]
,SalesLT.ProductModel.Name AS [ProductModel Name]
,SalesLT.Product.ListPrice
FROM
SalesLT.Product
INNER JOIN SalesLT.ProductCategory
ON SalesLT.Product.ProductCategoryID = SalesLT.ProductCategory.ProductCategoryID
INNER JOIN SalesLT.ProductModel
ON SalesLT.Product.ProductModelID = SalesLT.ProductModel.ProductModelID
</SQL>.Value, con)
Dim dt As New DataTable()
da.Fill(dt)
ReportViewer1.LocalReport.ReportPath = Application.StartupPath & "\Untitled.rdlc"
ReportViewer1.LocalReport.DataSources.Clear()
ReportViewer1.LocalReport.DataSources.Add(New Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", dt))
Posle toga sledi prikazivanje reporta:
Code: ReportViewer1.LocalReport.ReportPath = Application.StartupPath & "\Untitled.rdlc"
ReportViewer1.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout)
ReportViewer1.ZoomMode = Microsoft.Reporting.WinForms.ZoomMode.PageWidth
Me.ReportViewer1.RefreshReport()
I to bi trebalo da je to što se tiče reportinga.
Za export grida u excel koristi sledeći kod:
Code: Dim sfd As New SaveFileDialog()
sfd.Filter = "Excel Documents (*.xls)|*.xls"
sfd.FileName = "export.xls"
If sfd.ShowDialog() <> DialogResult.OK Then Exit Sub
'upisati ime datagrida
Dim dGV = DataGridView1
Dim stOutput As String = ""
' Export titles:
Dim sHeaders As String = ""
For j As Integer = 0 To dGV.Columns.Count - 1
sHeaders = sHeaders.ToString() + Convert.ToString(dGV.Columns(j).HeaderText) + vbTab
Next
stOutput += sHeaders & Convert.ToString(vbCr & vbLf)
' Export data.
For i As Integer = 0 To dGV.RowCount - 2
Dim stLine As String = ""
For j As Integer = 0 To dGV.Rows(i).Cells.Count - 1
stLine = stLine.ToString() + Convert.ToString(dGV.Rows(i).Cells(j).Value) + vbTab
Next
stOutput += stLine & Convert.ToString(vbCr & vbLf)
Next
Dim utf16 As System.Text.Encoding = System.Text.Encoding.GetEncoding(1254)
Dim output As Byte() = utf16.GetBytes(stOutput)
Dim fs As New IO.FileStream(sfd.FileName, IO.FileMode.Create)
Dim bw As New IO.BinaryWriter(fs)
bw.Write(output, 0, output.Length)
'write the encoded file
bw.Flush()
bw.Close()
fs.Close()
[ vbl14 @ 24.05.2014. 11:30 ] @
export je ok snimi sto je najvaznije :) ali prilkom otvranja tog snimljenog fajla dobijem poruku
Poslije potvrde na Yes otvori se fajl :), ovu sam poruku pokusao rjesiti tako sto sam u filterima mjenjao na .xlsx ali u tom slucaju nece nikako da otvori kasnije snimljeni fajl.... a ovo za reporte cu javiti ako uspijem sta ili u suprotnom traziti opet help... sada moram ove programe instalirati... posto ne moze onaj direktno report, trazi dodatne neke programe.. pa to sada cackam :) hvala u svakom slucaju... i cujemo se jos :)
[ vbl14 @ 24.05.2014. 12:55 ] @
prilikom instalacije M. report Viwera mi uporno javlja ovu gresku
instalirao sam i report builder 3 i sql citav i nadjem ovo sto pise da treba i nikako ne mogu... moze pomoc....
[ S A J A @ 24.05.2014. 13:19 ] @
[ vbl14 @ 26.05.2014. 06:51 ] @
Da i tu iz liste sam skunuo ovo prvo i instalirao, ali i dalje istu gresku izbacuje:
ENU\x64\SQLEXPR_x64_ENU.exe
132.3 MB
ENU\x64\SQLEXPRADV_x64_ENU.exe
1.3 GB
ENU\x64\SQLEXPRWT_x64_ENU.exe
669.9 MB
ENU\x64\SqlLocalDB.MSI
33.0 MB
ENU\x64\SQLManagementStudio_x64_ENU.exe
600.2 MB
ENU\x86\SQLEXPR_x86_ENU.exe
116.7 MB
ENU\x86\SQLEXPR32_x86_ENU.exe
101.5 MB
ENU\x86\SQLEXPRADV_x86_ENU.exe
1.3 GB
ENU\x86\SQLEXPRWT_x86_ENU.exe
706.1 MB
ENU\x86\SqlLocaLDB.MSI
27.8 MB
ENU\x86\SQLManagementStudio_x86_ENU.exe
614.9 MB
[ vbl14 @ 26.05.2014. 08:48 ] @
ala vise me sramora :D hehe al evo sada jedno pod pitanje :) na koji nacin da rjesim, kad se prilikom rada u programu pritisne tab da prebacuje u text box redosljedom koji ja odaberem... ovako sada prebacuje ali onim kako sam dodavao boxove, ali to nisam radio redom i sada to s brda na brdo ide :D a hocu da poredam redosljedom...
[ S A J A @ 26.05.2014. 22:23 ] @
Moraćeš da obrišeš sve kontrole sa forme i da ih poređaš onim redosledom kako hoćeš tab da "skače".
Šalim se.
Kad klikneš na kontrolu, properties, tabindex. Tu poređaj brojeve, počev od nule (čini mi se) pa će tako i da skače.
[ vbl14 @ 28.05.2014. 15:30 ] @
prepadae me i to dobro :D ko ce sad reko sve opet povezivati :)
ok.. da se zahvalim jos jednom svima, nisam sve rjesio ali napredujem... reporti mi nisu bili jer sam imao VB Express sada sam instalalirao VS 2010 i tu imam sve opcije koje koriste i po youtube tutorijalima.. tako da cu se tamo malo preseliti dok to ne rijesim, da ovdje ne dosadjujem sa tim reportima... Ovdje imam nekih drugih pitanja :D
Ako ima tema zamolio bi za link, a trenutno me muci kada se program smanji *minimaze to samo odsijece onaj ostatak i podesi na dimenzije koje zadam... mene zanima da uradim da on to smanji da se opet sve vidi ili bar da na dnu desnoj stani ubaci klizace tako da se moze prelistati i vidjeti cijeli program...
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|