• Tidak ada hasil yang ditemukan

5.1 Kesimpulan

Pada penelitian ini, average-based fuzzy time series berhasil diimplementasikan pada suatu sistem otomasi untuk meramalkan jumlah penjualan telur pada salah satu distributor telur di Kabupaten Deli Serdang untuk satu minggu ke depan. Dengan pengimplementasian metode average-based fuzzy time series ini peramalan dapat digunakan hanya dengan satu variabel data time series saja, yaitu dengan data penjualan telur dengan jumlah data yang tidak terlalu banyak, sehingga peramalan dapat dilakukan dengan mudah dan sederhana dibandingkan dengan metode peramalan lainnya yang melibatkan banyak variabel dan dengan jumlah data yang banyak.

5.2 Saran

Pada penelitian selanjutnya, diharapkan metode average-based fuzzy time series dapat dibandingkan dan dianalisis kinerjanya dengan metode lain pada data penelitian yang sama, agar didapatkan hasil peramalan yang lebih akurat dengan membandingkan

Abbas, Bahtiar Saleh. Robert. Shinta. 2008. “Analisis peramalan penjualan bahan bakar minyak jenis premium di SPBU Pahlawan Asri Bandung”. Piranti Warta 11(3): hal.469-482.

Ai, The Jin. 1999. “Optimasi peramalan pemulusan eksponensial satu parameter dengan menggunakan algoritma non-linear programming”. Jurnal Teknologi Industri 3(3): hal.139-148.

Anggraeni, Wiwik. Sri Wahyuni, Indah. 2011. “Penerapan metode exponentially

weighted quantile regression untuk peramalan penjualan mobil”. SNATI:

hal.231-236.

Anwary, A.A. 2011. Prediksi Kurs Rupiah Terhadap Dollar Amerika menggunakan

Metode Fuzzy Time Series. Tugas Akhir. Semarang:Universitas Diponegoro.

Chen, S. M. 1996. “Forecasting enrollments based on fuzzy time series”. Fuzzy Sets

and Systems 81: hal.311-319.

Haris, M. Syauqi. 2010. Implementasi Metode Fuzzy Time Series dengan Penentuan

Interval Berbasis Rata-rata untuk Peramalan Data Penjualan Bulanan. Tugas

Akhir. Malang:Universitas Brawijaya.

Hernasary, Yunita. 2007. Metode Time Invariant Fuzzy Time Series untuk Peramalan

Pendaftaran Calon Mahasiswa. Tugas Akhir. Medan:Universitas Sumatera

Utara.

Huarng, Kunhuang.”Heuristic models of fuzzy time series for forecasting”.2000. Fuzzy

Sets and Systems 123: hal.369-386.

Jilani, T.A. Burney, A.S.Ardil, Cemal,. 2008. “A new quantile based fuzzy time

series forecasting model”. International Jaournal of Electrical and

Engineering 3(8): hal.501-507.

Jumingan. 2009.Studi Kelayakan Bisnis – Teori dan pembuatan Proposal Kelayakan. Jakarta: Bumi Aksara.

Kusumadewi, S., Purnomo, H. 2004. Aplikasi Logika Fuzzy untuk pendukung

keputusan. Yogyakarta: Graha Ilmu.

Makridakis, S., Wheelright, S.C., McGee, V.E. 1992. Metode dan Aplikasi

Peramalan. Jilid I. Edisi 2. Terjemahan Andriyanto, U.S., Basith, A. Jakarta:

linear Programming pada PT.MAST”. National Conference: Design and

Application of Technology: hal.84-91.

Rahmawati, Ihwana. 2007. Perbandingan Antara Metode Arima Box-Jenkins dengan

Jaringan Multi Layer Perceptron untuk Peramalan Penjualan. Tugas Akhir.

Surabaya: Institut Teknologi Sepuluh Nopember.

Simorangkir, Sabrina Pratiwi. 2011. Implementasi Sistem Pendukung Keputusan

Investasi Perumahan dengan Metode Sugeno. Skripsi. Medan: Sumatera

Utara.

Song, Q., Chissom, B.S.1993.”Fuzzy time series and it models”. Fuzzy Sets and

Systems 54: hal.269-277.

Widodo, Joko. 2008. Ramalan Penjualan Sepeda Motor Honda. Tugas Akhir. Jakarta: Universitas Gunadarma.

Winarno, W.W. 2007. Analisis Ekonometrika dan Statistika dengan Eviews. Yogyakarta: UPP STIM YKPN.

Xihao, Sun. Yimin, Li. 2007. “Average-based fuzzy time series for forecasting

Shanghai compound index”. World Journal of Modelling and Simulation 4(2):

LAMPIRAN A: Listing Program

1. Form Login

Imports System.Data

Imports System.Data.SqlClient

Public Class LoginForm

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click

initializeConn()

Dim da As sqldataAdapter Dim ds As New DataSet Dim dt As DataTable

da = FetchData("SELECT COUNT(*) FROM pengguna WHERE username='" & UsernameTextBox.Text & "' AND password='" & md5Conv(PasswordTextBox.Text) & "'") ds.Clear() da.Fill(ds, "table") dt = ds.Tables(0) If dt.Rows(0)(0) > 0 Then actUser = UsernameTextBox.Text FormUtama.Show() Me.Close() Else

MsgBox("Username tidak cocok dengan password") End If

End Sub

Private Sub Cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel.Click

Me.Close() End Sub

Private Sub UsernameLabel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UsernameLabel.Click

End Sub End Class

2. Halaman Utama

Public Class FormUtama

Private Sub MDIParent1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

initializeConn()

LabelPengguna.Text = actUser LabelTanggal.Text = Now End Sub

Private Sub KeluarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KeluarToolStripMenuItem.Click

End End Sub

Private Sub LogOutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LogOutToolStripMenuItem.Click

LoginForm.Show() Me.Close() End Sub

Private Sub PenggunaToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PenggunaToolStripMenuItem.Click

FormPengguna.MdiParent = Me FormPengguna.Show()

End Sub

Private Sub UbahPasswordToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

FormUbahPass.MdiParent = Me FormUbahPass.Show()

End Sub

Private Sub OlahDataPenjualanToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles

OlahDataPenjualanToolStripMenuItem.Click FormPenjualan.MdiParent = Me FormPenjualan.Show()

End Sub

Private Sub PeramalanToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PeramalanToolStripMenuItem.Click

FormPeramalan.MdiParent = Me FormPeramalan.Show()

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

LabelTanggal.Text = Now End Sub

End Class

Imports System.Data

Imports System.Data.SqlClient

Public Class FormPenjualan

Public Sub btnState1() SimpanBtn.Enabled = True UbahBtn.Enabled = False BatalBtn.Enabled = False HapusBtn.Enabled = False CariBtn.Enabled = True End Sub

Public Sub btnState2()

SimpanBtn.Enabled = False UbahBtn.Enabled = True BatalBtn.Enabled = True HapusBtn.Enabled = True CariBtn.Enabled = False End Sub

Private Sub IsiTahun()

Dim dtmin, dtmax As DataTable

dtmin = FetchDataTable("SELECT MIN(YEAR(tanggal)) FROM penjualan") dtmax = FetchDataTable("SELECT MAX(YEAR(tanggal)) FROM penjualan") TahunCombo.Items.Clear()

Dim mintahun, maxtahun, i As Integer mintahun = dtmin.Rows(0)(0)

maxtahun = dtmax.Rows(0)(0) For i = mintahun To maxtahun TahunCombo.Items.Add(i) Next

End Sub

Private Sub IsiBulan(ByVal tahun As String) Dim dtmin, dtmax As DataTable

dtmin = FetchDataTable("SELECT MIN(MONTH(tanggal)) FROM penjualan WHERE tanggal LIKE '" & tahun & "%'")

dtmax = FetchDataTable("SELECT MAX(MONTH(tanggal)) FROM penjualan WHERE tanggal LIKE '" & tahun & "%'")

BulanCombo.Items.Clear()

Dim minbulan, maxbulan As Integer minbulan = dtmin.Rows(0)(0) maxbulan = dtmax.Rows(0)(0) While minbulan <= maxbulan

BulanCombo.Items.Add(convMonth(minbulan)) minbulan = minbulan + 1

End While End Sub

Public Sub newId()

Dim da As sqldataAdapter Dim ds As New DataSet Dim dt As DataTable

da = FetchData("SELECT COUNT(*) FROM penjualan") da.Fill(ds, "table")

dt = ds.Tables(0)

Dim n As Integer

n = dt.Rows(0)(0) + 1 While temp = False Dim kd As String

kd = "TLR" & n.ToString

da = FetchData("SELECT COUNT(*) FROM penjualan WHERE kode='" & kd & "'") ds.Clear() da.Fill(ds, "table") dt = ds.Tables(0) If (dt.Rows(0)(0) > 0) Then n = n + 1 Else temp = True End If End While

KdPenjualanTxt.Text = "TLR" & n.ToString End Sub

Public Sub fillDG(ByVal q As String) Dim da As SqlDataAdapter

Dim ds As New DataSet da = FetchData(q) da.Fill(ds, "table")

If ds.Tables(0).Rows.Count = 0 Then

MsgBox("Data penjualan tidak dapat ditemukan") End If

DataGridView1.DataSource = ds.Tables(0) End Sub

Private Sub TutupBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TutupBtn.Click

Me.Close() End Sub

Private Sub FormPenjualan_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

IsiTahun()

IsiBulan(TahunCombo.Text) newId()

btnState1()

fillDG("SELECT * FROM penjualan ORDER BY tanggal") KdPenjualanTxt.Enabled = False

End Sub

Private Sub TahunCombo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TahunCombo.SelectedIndexChanged

IsiBulan(TahunCombo.Text) End Sub

Private Sub SimpanBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SimpanBtn.Click

If JlhPenjualanTxt.Text = "" Then MsgBox("Isi jumlah penjualan") Else

Dim da As SqlDataAdapter Dim ds As New DataSet Dim dt As DataTable

da = FetchData("SELECT COUNT(*) FROM penjualan WHERE tanggal='" & Format(PeriodeDP.Value, "yyyy-MM-dd") & "'")

da.Fill(ds, "table") dt = ds.Tables(0)

If (dt.Rows(0)(0) > 0) Then

MsgBox("Data penjualan sudah terdaftar untuk tanggal ini") Exit Sub

End If

RunQuery("INSERT INTO penjualan(kode, tanggal, jumlah) VALUES ('" & KdPenjualanTxt.Text & "','" & Format(PeriodeDP.Value, "yyyy-MM-dd") & "','" & Val(JlhPenjualanTxt.Text) & "')")

newId()

JlhPenjualanTxt.Clear()

fillDG("SELECT * FROM penjualan ORDER BY tanggal") JlhPenjualanTxt.Focus()

End If End Sub

Private Sub BatalBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BatalBtn.Click

newId() PeriodeDP.Value = Today JlhPenjualanTxt.Clear() btnState1() DataGridView1.ClearSelection() JlhPenjualanTxt.Focus() End Sub

Private Sub DataGridView1_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick btnState2() KdPenjualanTxt.Text = DataGridView1.SelectedRows(0).Cells(0).Value PeriodeDP.Value = DataGridView1.SelectedRows(0).Cells(1).Value JlhPenjualanTxt.Text = DataGridView1.SelectedRows(0).Cells(2).Value JlhPenjualanTxt.Focus() End Sub

Private Sub HapusBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HapusBtn.Click

RunQuery("DELETE FROM penjualan WHERE kode='" & KdPenjualanTxt.Text & "'")

fillDG("SELECT * FROM penjualan ORDER BY tanggal") newId() PeriodeDP.Value = Today JlhPenjualanTxt.Clear() btnState1() DataGridView1.ClearSelection() JlhPenjualanTxt.Focus() End Sub

Private Sub CariBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CariBtn.Click

Dim cond As String

If deconvMonth(BulanCombo.Text) = 1 Or deconvMonth(BulanCombo.Text) = 2 Then

cond = " tanggal LIKE '%" & TahunCombo.Text & "%-0" & deconvMonth(BulanCombo.Text) & "-%'"

cond = " tanggal LIKE '%" & TahunCombo.Text & "%-%" & deconvMonth(BulanCombo.Text) & "%-%'"

End If

fillDG("SELECT * FROM penjualan WHERE kode LIKE '%" & TextBox1.Text & "%' AND" & cond & " ORDER BY tanggal")

End Sub

Private Sub UbahBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UbahBtn.Click

If JlhPenjualanTxt.Text = "" Then MsgBox("Isi jumlah penjualan") Else

RunQuery("UPDATE penjualan SET tanggal='" & Format(PeriodeDP.Value, "yyyy-MM-dd") & "', jumlah='" & Val(JlhPenjualanTxt.Text) & "' WHERE kode='" & KdPenjualanTxt.Text & "'")

fillDG("SELECT * FROM penjualan ORDER BY tanggal") newId() PeriodeDP.Value = Today JlhPenjualanTxt.Clear() btnState1() DataGridView1.ClearSelection() JlhPenjualanTxt.Focus() End If End Sub End Class 4. Halaman Peramalan

Public Class FormPeramalan

Dim cond As String

Dim Dmin, Dmax, n As Double Dim interval As Double Dim u(1000, 2) As Long Dim c, a(1000000) As Integer Dim flrg(1000) As ArrayList

Private Sub getMin()

Dim dtmin, dtmax As DataTable

dtmin = FetchDataTable("SELECT MIN(jumlah) FROM penjualan " & cond) dtmax = FetchDataTable("SELECT MAX(jumlah) FROM penjualan " & cond) If IsDBNull(dtmin.Rows(0)(0)) Then

MsgBox("Tidak ada penjualan pada range periode ini") Exit Sub

End If

Dmin = dtmin.Rows(0)(0) Dmax = dtmax.Rows(0)(0) End Sub

Private Sub getFLRG() Dim dtmin As DataTable

dtmin = FetchDataTable("SELECT MIN(jumlah) FROM penjualan " & cond) If IsDBNull(dtmin.Rows(0)(0)) Then

Exit Sub End If

dt = FetchDataTable("SELECT jumlah, tanggal FROM penjualan " & cond & " ORDER BY tanggal")

If dt.Rows.Count < 3 Then

MsgBox("Data penjualan pada range tanggal tidak mencukupi untuk melakukan peramalan")

Exit Sub End If

Dim ave As Double Dim i As Long n = dt.Rows.Count ave = 0

For i = 0 To dt.Rows.Count - 2

ave += Math.Abs(dt.Rows(i)(0) - dt.Rows(i + 1)(0)) / n Next ave /= 2 Dim pw10 As Double pw10 = 0.1 While (pw10 <= ave) pw10 *= 10 End While pw10 /= 10 interval = Math.Round(ave / pw10) * pw10 c = 0

For i = Dmin To Dmax Step interval u(c, 0) = i u(c, 1) = i + interval c += 1 Next For i = 0 To dt.Rows.Count - 1 Dim tmp As Integer tmp = 0

While (dt.Rows(i)(0) >= u(tmp, 1)) And tmp < c tmp += 1

End While a(i) = tmp Next

For i = 0 To 999

flrg(i) = New ArrayList Next For i = 0 To dt.Rows.Count - 2 flrg(a(i)).Add(a(i + 1)) Next DataGridView1.DataSource = Nothing DataGridView1.Columns.Clear() Dim dt2 As DataTable

dt2 = FetchDataTable("SELECT * FROM penjualan " & cond & " ORDER BY tanggal")

Dim tgl As Date

dt2.Rows.Add("Peramalan", tgl, 0) DataGridView1.DataSource = dt2

Dim dc As New DataGridViewTextBoxColumn Dim cell As New DataGridViewTextBoxCell

dc.HeaderText = "Peramalan" dc.CellTemplate = cell

DataGridView1.Columns.Add(dc)

DataGridView1.Rows(0).Cells(3).Value = 0

For i = 0 To dt.Rows.Count - 1 Dim temp As Double

temp = 0

If (flrg(a(i)).Count < 1) Then

temp = Math.Round(aver(u(a(i), 0), u(a(i), 1))) Else

Dim ntemp As Double Dim j As Long

ntemp = flrg(a(i)).Count For j = 0 To ntemp - 1 Dim k As Long

k = flrg(a(i)).Item(j)

temp += aver(u(k, 0), u(k, 1)) / ntemp Next

End If

DataGridView1.Rows(i + 1).Cells(3).Value = Math.Round(temp) Next

Dim err As Double err = 0 For i = 1 To dt.Rows.Count - 1 err += (Math.Abs(DataGridView1.Rows(i).Cells(2).Value - DataGridView1.Rows(i).Cells(3).Value) / DataGridView1.Rows(i).Cells(2).Value) / CDbl(n - 1) Next ErrorLbl.Text = Math.Round(err * 100, 2) End Sub

Private Sub proses() getMin()

getFLRG() End Sub

Private Sub IsiTahun()

Dim dtmin, dtmax As DataTable

dtmin = FetchDataTable("SELECT MIN(YEAR(tanggal)) FROM penjualan") dtmax = FetchDataTable("SELECT MAX(YEAR(tanggal)) FROM penjualan") TahunCombo.Items.Clear()

Dim mintahun, maxtahun, i As Integer mintahun = dtmin.Rows(0)(0)

maxtahun = dtmax.Rows(0)(0) For i = mintahun To maxtahun TahunCombo.Items.Add(i) Next

End Sub

Private Sub IsiBulan(ByVal tahun As String) Dim dtmin, dtmax As DataTable

dtmin = FetchDataTable("SELECT MIN(MONTH(tanggal)) FROM penjualan WHERE tanggal LIKE '" & tahun & "%'")

dtmax = FetchDataTable("SELECT MAX(MONTH(tanggal)) FROM penjualan WHERE tanggal LIKE '" & tahun & "%'")

BulanCombo.Items.Clear()

Dim minbulan, maxbulan As Integer minbulan = dtmin.Rows(0)(0)

maxbulan = dtmax.Rows(0)(0) While minbulan <= maxbulan

BulanCombo.Items.Add(convMonth(minbulan)) minbulan = minbulan + 1

End While End Sub

Private Sub TutupBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TutupBtn.Click

Me.Close() End Sub

Private Sub FormPeramalan_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

RadioButton1.Checked = True GroupBox1.Enabled = True RadioButton2.Checked = False GroupBox2.Enabled = False IsiTahun() IsiBulan(TahunCombo.Text) Button4.Enabled = False Button3.Enabled = False End Sub

Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged

If RadioButton1.Checked Then GroupBox1.Enabled = True Else GroupBox1.Enabled = False End If End Sub

Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged

If RadioButton2.Checked Then GroupBox2.Enabled = True Else GroupBox2.Enabled = False End If End Sub

Private Sub Tanggal1DP_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tanggal1DP.ValueChanged

If Tanggal1DP.Value > Tanggal2DP.Value Then Tanggal1DP.Value = Tanggal2DP.Value End If

End Sub

Private Sub Tanggal2DP_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tanggal2DP.ValueChanged

If Tanggal2DP.Value < Tanggal1DP.Value Then Tanggal2DP.Value = Tanggal1DP.Value End If

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Button4.Enabled = True Button3.Enabled = True

MsgBox("Pilih bulan dan tahun") Else

If deconvMonth(BulanCombo.Text) = 1 Or deconvMonth(BulanCombo.Text) = 2 Then

cond = " WHERE tanggal LIKE '%" & TahunCombo.Text & "%-0" & deconvMonth(BulanCombo.Text) & "-%'"

Else

cond = " WHERE tanggal LIKE '%" & TahunCombo.Text & "%-%" & deconvMonth(BulanCombo.Text) & "%-%'"

End If proses() End If End Sub

Private Sub TahunCombo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TahunCombo.SelectedIndexChanged

IsiBulan(TahunCombo.Text) End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Button4.Enabled = True Button3.Enabled = True

cond = "WHERE tanggal BETWEEN '" & Format(Tanggal1DP.Value, "yyyy-MM- dd") & "' AND '" & Format(Tanggal2DP.Value, "yyyy-MM-dd") & "'"

proses() End Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

FormGrafik.Show() End Sub

'Print data grid

Private oStringFormat As StringFormat

Private oStringFormatComboBox As StringFormat Private oButton As Button

Private oCheckbox As CheckBox Private oComboBox As ComboBox Private nTotalWidth As Int16 Private nRowPos As Int16 Private NewPage As Boolean Private nPageNo As Int16 Private Header As String

Private sUserName As String = FormUtama.LabelPengguna.Text

Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint oStringFormat = New StringFormat

oStringFormat.Alignment = StringAlignment.Near oStringFormat.LineAlignment = StringAlignment.Center oStringFormat.Trimming = StringTrimming.EllipsisCharacter oStringFormatComboBox = New StringFormat

oStringFormatComboBox.LineAlignment = StringAlignment.Center oStringFormatComboBox.FormatFlags = StringFormatFlags.NoWrap oStringFormatComboBox.Trimming = StringTrimming.EllipsisCharacter

oButton = New Button oCheckbox = New CheckBox oComboBox = New ComboBox nTotalWidth = 0

For Each oColumn As DataGridViewColumn In DataGridView1.Columns nTotalWidth += oColumn.Width Next nPageNo = 1 NewPage = True nRowPos = 0 End Sub

Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage Static oColumnLefts As New ArrayList

Static oColumnWidths As New ArrayList Static oColumnTypes As New ArrayList Static nHeight As Int16

Dim nWidth, i, nRowsPerPage As Int16 Dim nTop As Int16 = e.MarginBounds.Top Dim nLeft As Int16 = e.MarginBounds.Left If nPageNo = 1 Then

For Each oColumn As DataGridViewColumn In DataGridView1.Columns nWidth = CType(Math.Floor(oColumn.Width / nTotalWidth * nTotalWidth * (e.MarginBounds.Width / nTotalWidth)), Int16)

nHeight = e.Graphics.MeasureString(oColumn.HeaderText, oColumn.InheritedStyle.Font, nWidth).Height + 11 oColumnLefts.Add(nLeft) oColumnWidths.Add(nWidth) oColumnTypes.add(oColumn.GetType) nLeft += nWidth Next End If

Do While nRowPos < DataGridView1.Rows.Count

Dim oRow As DataGridViewRow = DataGridView1.Rows(nRowPos) If nTop + nHeight >= e.MarginBounds.Height + e.MarginBounds.Top Then DrawFooter(e, nRowsPerPage) NewPage = True nPageNo += 1 e.HasMorePages = True Exit Sub Else If NewPage Then ' Draw Header

e.Graphics.DrawString(Header, New Font(DataGridView1.Font, FontStyle.Bold), Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top - e.Graphics.MeasureString(Header, New Font(DataGridView1.Font, FontStyle.Bold), e.MarginBounds.Width).Height - 13)

' Draw Columns

nTop = e.MarginBounds.Top i = 0

For Each oColumn As DataGridViewColumn In DataGridView1.Columns

e.Graphics.FillRectangle(New

SolidBrush(Drawing.Color.LightGray), New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight))

e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight)) e.Graphics.DrawString(oColumn.HeaderText,

New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat) i += 1 Next NewPage = False End If nTop += nHeight i = 0

For Each oCell As DataGridViewCell In oRow.Cells

If oColumnTypes(i) Is GetType(DataGridViewTextBoxColumn) OrElse oColumnTypes(i) Is GetType(DataGridViewLinkColumn) Then

e.Graphics.DrawString(oCell.Value.ToString,

oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), nTop, oColumnWidths(i), nHeight), oStringFormat) ElseIf oColumnTypes(i) Is GetType(DataGridViewButtonColumn) Then

oButton.Text = oCell.Value.ToString

oButton.Size = New Size(oColumnWidths(i), nHeight) Dim oBitmap As New Bitmap(oButton.Width,

oButton.Height)

oButton.DrawToBitmap(oBitmap, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))

e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))

ElseIf oColumnTypes(i) Is GetType(DataGridViewCheckBoxColumn) Then

oCheckbox.Size = New Size(14, 14)

oCheckbox.Checked = CType(oCell.Value, Boolean) Dim oBitmap As New Bitmap(oColumnWidths(i), nHeight) Dim oTempGraphics As Graphics =

Graphics.FromImage(oBitmap)

oTempGraphics.FillRectangle(Brushes.White, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))

oCheckbox.DrawToBitmap(oBitmap, New Rectangle(CType((oBitmap.Width - oCheckbox.Width) / 2, Int32),

CType((oBitmap.Height - oCheckbox.Height) / 2, Int32), oCheckbox.Width, oCheckbox.Height))

e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))

ElseIf oColumnTypes(i) Is GetType(DataGridViewComboBoxColumn) Then

oComboBox.Size = New Size(oColumnWidths(i), nHeight) Dim oBitmap As New Bitmap(oComboBox.Width,

oComboBox.Height)

oComboBox.DrawToBitmap(oBitmap, New Rectangle(0, 0, oBitmap.Width, oBitmap.Height))

e.Graphics.DrawImage(oBitmap, New Point(oColumnLefts(i), nTop))

e.Graphics.DrawString(oCell.Value.ToString,

oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i) + 1, nTop, oColumnWidths(i) - 16, nHeight),

oStringFormatComboBox)

ElseIf oColumnTypes(i) Is GetType(DataGridViewImageColumn) Then

Dim oCellSize As Rectangle = New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight)

Dim oImageSize As Size = CType(oCell.Value, Image).Size e.Graphics.DrawImage(oCell.Value, New

Rectangle(oColumnLefts(i) + CType(((oCellSize.Width - oImageSize.Width) / 2), Int32), nTop + CType(((oCellSize.Height - oImageSize.Height) / 2), Int32), CType(oCell.Value, Image).Width, CType(oCell.Value, Image).Height))

End If

e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), nTop, oColumnWidths(i), nHeight)) i += 1 Next End If nRowPos += 1 nRowsPerPage += 1 Loop DrawFooter(e, nRowsPerPage) e.HasMorePages = False End Sub

Private Sub DrawFooter(ByVal e As

System.Drawing.Printing.PrintPageEventArgs, ByVal RowsPerPage As Int32) Dim sPageNo As String = nPageNo.ToString + " of " +

Math.Ceiling(DataGridView1.Rows.Count / RowsPerPage).ToString ' Right Align - User Name

e.Graphics.DrawString(sUserName, DataGridView1.Font, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - e.Graphics.MeasureString(sPageNo, DataGridView1.Font, e.MarginBounds.Width).Width), e.MarginBounds.Top +

e.MarginBounds.Height + 7) ' Left Align - Date/Time

e.Graphics.DrawString(Now.ToLongDateString + " " +

Now.ToShortTimeString, DataGridView1.Font, Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top + e.MarginBounds.Height + 7)

' Center - Page No. Info

e.Graphics.DrawString(sPageNo, DataGridView1.Font, Brushes.Black, e.MarginBounds.Left + (e.MarginBounds.Width - e.Graphics.MeasureString(sPageNo, DataGridView1.Font, e.MarginBounds.Width).Width) / 2, e.MarginBounds.Top + e.MarginBounds.Height + 31)

End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

If RadioButton1.Checked Then

Header = "Data penjualan dan peramalan pada bulan " & BulanCombo.Text & " tahun " & TahunCombo.Text

Else

Header = "Data penjualan dan peramalan " & Tanggal1DP.Text & " - " & Tanggal2DP.Text

End If

Dim dlg As New PrintPreviewDialog() dlg.Width = 600 dlg.Height = 700 dlg.Document = PrintDocument1 dlg.ShowDialog() End Sub End Class 5. Halaman Grafik

Public Class FormGrafik

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim i As Integer

dt.Columns.Add("tanggal") dt.Columns.Add("jumlah") dt.Columns.Add("peramalan")

For i = 0 To FormPeramalan.DataGridView1.Rows.Count - 1 Dim dr As DataRow = dt.NewRow

dr("tanggal") = Format(FormPeramalan.DataGridView1.Rows(i).Cells(1).Value, "yyyy-MM-dd") dr("jumlah") = Math.Round(FormPeramalan.DataGridView1.Rows(i).Cells(2).Value) dr("peramalan") = Math.Round(FormPeramalan.DataGridView1.Rows(i).Cells(3).Value) dt.Rows.Add(dr) Next Chart1.DataSource = dt

Chart1.Series(0).Name = "Hasil sebenarnya" Chart1.Series.Add("Prediksi") Chart1.Series(0).IsValueShownAsLabel = True Chart1.Series(1).IsValueShownAsLabel = True Chart1.Series(0).XValueMember = "tanggal" Chart1.Series(1).XValueMember = "tanggal" Chart1.Series(0).YValueMembers = "jumlah" Chart1.Series(1).YValueMembers = "peramalan" Chart1.DataBind() End Sub

'Print data grid

Private oStringFormat As StringFormat

Private oStringFormatComboBox As StringFormat Private oButton As Button

Private oCheckbox As CheckBox Private oComboBox As ComboBox Private nTotalWidth As Int16 Private nRowPos As Int16 Private NewPage As Boolean Private nPageNo As Int16 Private Header As String

Private sUserName As String = FormUtama.LabelPengguna.Text

Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint oStringFormat = New StringFormat

oStringFormat.Alignment = StringAlignment.Near oStringFormat.LineAlignment = StringAlignment.Center oStringFormat.Trimming = StringTrimming.EllipsisCharacter oStringFormatComboBox = New StringFormat

oStringFormatComboBox.LineAlignment = StringAlignment.Center oStringFormatComboBox.FormatFlags = StringFormatFlags.NoWrap oStringFormatComboBox.Trimming = StringTrimming.EllipsisCharacter oButton = New Button

oCheckbox = New CheckBox

Dokumen terkait