Pages

Subscribe:

Saturday, April 30, 2011

Membuat AutoComplete pada Combobox

Berikut merupakan cara bagaimana sewaktu kita menekan huruf awalan dari setiap kata di-comboxbox akan memunculkan suggestion/autocomplete seperti ini
, saya menggunakan database sample dari Microsoft yaitu AdventureWorks, berikut SQL Query-nya (StoredProcedure):

CREATE PROCEDURE [dbo].[spGetEmployee]
AS
BEGIN
      SELECT A.NationalIDNumber, B.FirstName AS [Name]
      FROM HumanResources.Employee AS A
            INNER JOIN Person.Contact AS B
            ON A.ContactID = B.ContactID
END

Jika ingin memunculkan Name dan NationalIDNumber sekaligus juga dapat menggunakan SQL-Query sbb:
CREATE PROCEDURE [dbo].[spGetEmployee]
AS
BEGIN
      SELECT A.NationalIDNumber, (B.FirstName + ' (' + A.NationalIDNumber + ')') AS [Name]
      FROM HumanResources.Employee AS A
            INNER JOIN Person.Contact AS B
            ON A.ContactID = B.ContactID
END

Berikut code pada Class yang digunakan untuk DataAccess:
    Public Function GetAllEmp() As DataSet
        Dim ds As New DataSet
        Using sqlConn As New SqlConnection(My.Settings.AdventureWorksConnectionString)
            Using sqlDA As New SqlDataAdapter("dbo.spGetEmployee", sqlConn)
                sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure
                sqlDA.Fill(ds)
            End Using
        End Using
        Return ds
    End Function

Code pada Form:
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ds As New DataSet
        ds = objSale.GetAllEmp
        cboEmployee.DataSource = ds.Tables(0)
        cboEmployee.DisplayMember = "Name"
        cboEmployee.ValueMember = "NationalIDNumber"
        cboEmployee.AutoCompleteMode = AutoCompleteMode.SuggestAppend
        cboEmployee.AutoCompleteSource = AutoCompleteSource.ListItems
    End Sub

Silahkan disesuaikan dengan kebutuhan, untuk Query yang menampilkan Name dan National ID akan muncul seperti ini:

Untuk menyimpan, gunakan Kode-nya dengan code:
lblNationalIDNumber.Text = cboEmployee.SelectedValue

ComboBox terdapat 2 property yang digunakan untuk memanipulasi data :
        cboEmployee.DisplayMember = "Name"
        cboEmployee.ValueMember = "NationalIDNumber

-          DisplayMember merupakan text yang ditampilkan
-          ValueMember merupakan text/code dari yang ditampilkan sehingga kita dapat menggunakan .SelectedValue untuk mengambil ID/Code-nya

Membuat Laporan dengan Crystal Report for Visual Studio

Laporan merupakan output dari sebuah sistem yang kita buat, maka oleh itu laporan sangat penting dari setiap sistem yang dibuat.
Berikut langkah-langkah singkat untuk membuat sebuat laporan dengan menggunakan Crystal Report for Visual Studio (Crystal Report yang sudah build in didalam Visual Studio diatas versi Express), sebenarnya Anda juga dapat menggunkan Crystal Report dengan aplikasi terpisah.

Pertama-tama, Anda harus membuat DataSet dengan menggunakan file .XSD, yang digunakan untuk menarik/ menempatkan field2 kedalam report designer nantinya:
... (next update)

Langkah-langkah berikutnya akan saya update nantinya beserta gambarnya...

Berikut Code untuk memunculkan Report:
- Buatlah sebuah Class sebagai DataAccess ke Database (misalnya: Class Sale)
Imports System.Data
Imports System.Data.SqlClient
Public Class Sales
    'Get Sales Invoice value and return in DATASET
    Public Function GenerateInvoice( _
            ByVal SalesOrderID As Integer, _
            ByVal PrintedBy As String) As DataSet
        Dim ds As New DataSet
        Using sqlConn As New SqlConnection(My.Settings.AdventureWorksConnectionString)
            Using sqlDA As New SqlDataAdapter("Sales.spGenerateInvoice", sqlConn)
                sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure
                With sqlDA.SelectCommand.Parameters
                    .AddWithValue("@SalesOrderID", SalesOrderID)
                    .AddWithValue("@PrintedBy", PrintedBy)
                End With
                sqlDA.Fill(ds)
            End Using
        End Using
        Return ds
    End Function

    'Get Sales Invoice value without return the value but
    'passing the control ByRef on parameter to fill directly
    Public Sub GenerateInvoice(ByRef dtReport As DataTable, _
         ByVal SalesOrderID As Integer, _
         ByVal PrintedBy As String)
        Using sqlConn As New SqlConnection(My.Settings.AdventureWorksConnectionString)
            Using sqlDA As New SqlDataAdapter("Sales.spGenerateInvoice", sqlConn)
                sqlDA.SelectCommand.CommandType = CommandType.StoredProcedure
                With sqlDA.SelectCommand.Parameters
                    .AddWithValue("@SalesOrderID", SalesOrderID)
                    .AddWithValue("@PrintedBy", PrintedBy)
                End With
                sqlDA.Fill(dtReport)
            End Using
        End Using
    End Sub
End Class


- Berikut Code dari Form yang digunakan untuk memanggil Crystal Report
Public Class Form1
    Private dsR As New DataSet
    Private objDSReport As New dsReport
    Private objSale As New Sales
    Private Sub btnDirectPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDirectPrint.Click

        '----------- CARA 1 -------------
        'Dim ds As New DataSet
        'ds = objSale.GenerateInvoice(txtSalesOrderID.Text, "Budiyanto")
        'For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
        '    objDSReport.Tables("dtSalesInvoice").Rows.Add()
        '    With objDSReport.Tables("dtSalesInvoice").Rows(i)
        '        .Item(0) = ds.Tables(0).Rows(i).Item(0)
        '        .Item(1) = ds.Tables(0).Rows(i).Item(1)
        '        .Item(2) = ds.Tables(0).Rows(i).Item(2)
        '        .Item(3) = ds.Tables(0).Rows(i).Item(3)
        '        .Item(4) = ds.Tables(0).Rows(i).Item(4)
        '        .Item(5) = ds.Tables(0).Rows(i).Item(5)
        '        .Item(6) = ds.Tables(0).Rows(i).Item(6)
        '        .Item(7) = ds.Tables(0).Rows(i).Item(7)
        '        .Item(8) = ds.Tables(0).Rows(i).Item(8)
        '        .Item(9) = ds.Tables(0).Rows(i).Item(9)
        '        .Item(10) = ds.Tables(0).Rows(i).Item(10)
        '    End With
        'Next
        'Dim rSalesInvoice As New rptSalesInvoice
        'rSalesInvoice.SetDataSource(objDSReport.Tables("dtSalesInvoice"))
        'rSalesInvoice.PrintToPrinter(1, False, 1, 999)

        '------------ CARA 2 --------------
        objSale.GenerateInvoice(objDSReport.Tables("dtSalesInvoice"), _
                                txtSalesOrderID.Text, "Budiyanto")
        Dim rSalesInvoice As New rptSalesInvoice
        rSalesInvoice.SetDataSource(objDSReport.Tables("dtSalesInvoice"))
        rSalesInvoice.PrintToPrinter(1, True, 1, 999)
    End Sub

    Private Sub btnPreview_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnPreview.Click

        objSale.GenerateInvoice(objDSReport.Tables("dtSalesInvoice"), _
                                txtSalesOrderID.Text, "Budiyanto")
        Dim rSalesInvoice As New rptSalesInvoice
        rSalesInvoice.SetDataSource(objDSReport.Tables("dtSalesInvoice"))
        crvSalesInvoice.ReportSource = rSalesInvoice
        crvSalesInvoice.Refresh()

    End Sub
End Class

Silahkan dicoba, jika ada yang ingin membuat tutorial step by step, bisa email kesaya dalam bentuk document MS. Word, nanti saya postkan....
(dari mahasiswa untuk mahasiswa)