Selasa, 23 Oktober 2012

TextBox AutoComplete dengan Database sebagai Data Source

Proses AutoComplete di TextBox lebih mirip ketika kita mengetikan kata di google, maka akan keluar kata yang menyerupai kata yang diketik secara otomatis. Proses ini dengan tujuan untuk mempermudah user dalam memilih/mencari kata yang dicarinya. Langsung saja kita bahas listing Programnya..

1. buat sebuah TextBox di dalam Form dan kita beri nama txtNama.



2. di Property box ubah AutocompleteMode -- > SuggestAppend dan AotuCompleteSource --> CustomeSource



3. Buat Prosedure :
     
    Private Sub ProcACText()
        Dim ds As DataSet = New DataSet()
        Dim SQL As String
        Dim authors As New AutoCompleteStringCollection

        SQL = "select Fullname from Person where RecordKey between 2042470 and 2045000 order by Fullname"

        CheckConnection() 'Prosedure Koneksi silahkan buat sendiri        

        Dim SqlDbDataAdapter As System.Data.SqlClient.SqlDataAdapter = New System.Data.SqlClient.SqlDataAdapter(SQL, SQLConn)
        SqlDbDataAdapter.Fill(ds, "Person")
        Dim dvManager As DataViewManager = New DataViewManager(ds)
        Dim dv As DataView = dvManager.CreateDataView(ds.Tables("Person"))

        For Each dRow In ds.Tables(0).Rows
            txtNama.AutoCompleteCustomSource.Add(dRow("Fullname").ToString)
        Next
    End Sub


4. Panggil Prosedure di Load Form


Private Sub FrmAutocompleteTextBox_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Call ProcACText()
    End Sub

5. Running Program Hasilnya akan terlihat seperti Gambar dibawah ini :



Selamat Mencoba !!

     

24 komentar:

  1. assalamualaikum wrb

    mas boleh saya tanya ga

    http://i673.photobucket.com/albums/vv99/the_jak86/cari.jpg

    ketika di ketik di kolom cari data lalu di klik botton cari akan muncul di data grid apa yang kita ketik di kolom cari data


    mohon pencerahan nya ya mas

    wasalamualaikum

    BalasHapus
    Balasan
    1. wa'alaikum salam.
      sebelumnya salam kenal Y. ma'af baru bisa balas.
      misalnya kita buat untuk proses pencarian pembelian barang dengan kriteria dari tanggal a sampai dengan tanggal b.

      1. pertama kali kita tentukan field apa saja yang akan di tampilkan. misal. Kode Barang, Nama Barang, tanggal pembelian.
      2. kemudian setting kolom di Grid, dengan meng-Klik kanan dan add column, nama grid saya kasih nama GridMe. (saya asumsikan kamu udah bisa y tambah kolom)
      3. baru buat querynya. (text box saya kasih nama txtNamaBrng, datetimepicker1 = dtTglAwal, datetimepicker2 = dtTglAkhir).
      4. double klik button cari.
      5. ketik query nya misalnya seperti ini.

      Private Sub cmdCari_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmdLihat.Click

      Dim SQL As String

      SQL = "SELECT KdBarang,NamaBarang,TglBeli FROM Pembelian WHERE "
      SQL = SQL & " TglBeli BETWEEN dtTglAwal and dtThlAkhir "

      Dim ds As DataSet = New DataSet()
      CheckConnection() '---- Prosedur koneksi ke database/server
      '---- silahkan buat sendiri

      Dim SqlDbDataAdapter As System.Data.SqlClient.SqlDataAdapter = New System.Data.SqlClient.SqlDataAdapter(SQL, SQLConn)

      SqlDbDataAdapter.Fill(ds, "Pembelian")

      Dim dvManager As DataViewManager = New DataViewManager(ds)
      Dim dv As DataView = dvManager.CreateDataView(ds.Tables("Pembelian"))

      Gridme.DataSource = dv

      End Sub

      6. Sekarang coba running programnya. maka Insya Allah akan keluar data di Gridnya sesuai dengan yang diharapkan. semoga membantu.

      Wassalam

      Hapus
  2. assalammu'alaikum salam kenal mas asep saya jo
    mau tnya..
    saya sudah berhasil membuat autocomplete
    saya ingin menanyakan seperti ini :
    data yg keluar dari autocomplete saya klik/pilih nah data yg lain ada di textbox lain
    contoh..
    ada dua textbox yg satu kode barang dan satu nama barang
    saya ketik kode barang sehingga muncul autocomplete, lalu saya pilih salah satu kode tsb
    yg saya inginkan ketika saya pilih kode barang
    nama barang muncul di textbox ke 2

    bgaimana ya caranya pak asep mohon bantuannya...
    terima kasih

    BalasHapus
    Balasan
    1. buat procedure CMBKdBarang_Dropdownclosed.
      dalam procedure ini cari namabarang berdasarkan kodebarang tersebut dan keluarkan di textbox nama barang. misalnya sbb :

      Private Sub CmbKdBarang_DropDownClosed(ByVal sender As Object, ByVal e As System.EventArgs) Handles CmbBarang.DropDownClosed
      dim SQLstring as string

      SQLString = "Select NmBarang from masterbarang where KdBrg = '" & cmbKdbrg.text & "'"

      CheckConnection()
      PerintahSQL(SQL)

      Dim Baca As SqlClient.SqlDataReader = SQLComm.ExecuteReader(CommandBehavior.CloseConnection)

      Try
      If Baca.HasRows Then
      If Baca.Read Then
      txtNmBrg = CFunction.SNull(Baca("NamaBarang"))
      End If
      End If

      Baca = Nothing
      SQLComm.Dispose()
      SQLComm = Nothing
      SQLConn.Close()
      CFunction.FlushMemory()

      Finally
      If Not Baca Is Nothing Then
      Baca.Close()
      Baca = Nothing
      End If
      If Not SQLComm Is Nothing Then
      SQLComm.Dispose()
      SQLComm = Nothing
      End If
      CFunction.FlushMemory()
      End Try

      CFunction.FlushMemory()


      End Sub

      Hapus
  3. Pak Saya mau tanya kalo SQLConn itu apa ya??
    kok saya copas dari bapak SQLConn nya merah pak..??
    trims

    BalasHapus
    Balasan
    1. SQLConn itu adalah sebuah variable mas. Variable untuk melakukan koneksi ke database. mas bisa tambahkan di Module sbb :

      Public SQLConn As New SqlConnection(MyProvider)

      #Region "Cek Connection String"
      Public Sub CheckConnection()

      Dim IPAddress As String = ""
      Dim DbsName As String = ""
      Dim PassDB As String = ""
      Dim StrConn As String = ""

      IPAddress = GetIniSetting(strINIFile, "Setting", "ServerIP") -- untuk alamat IP Server Database
      DbsName = GetIniSetting(strINIFile, "Setting", "DBsName") -- Untuk Nama Database
      PassDB = GetIniSetting(strINIFile, "Setting", "PassDB") -- Untuk Password Database

      StrConn = "Persist Security Info=false;"
      StrConn = StrConn & "Data Source=" + IPAddress + ";"
      StrConn = StrConn & "Initial Catalog=" + DbsName + ";"
      StrConn = StrConn & "User ID=sa;"
      StrConn = StrConn & "Password=" + PassDB + ";"

      MyProvider = StrConn


      SQLConn = New SqlConnection(MyProvider)

      If SQLConn Is Nothing Then
      SQLConn = New SqlConnection(MyProvider)
      SQLConn.Open()
      Else
      If SQLConn.State = ConnectionState.Closed Or SQLConn.State = ConnectionState.Broken Then
      SQLConn.Open()
      End If
      End If
      End Sub
      #End Region

      Hapus
  4. mau tanya dong..
    kalo autocomplete nya lebih dari satu fild bisa gak ya?
    yang di tampilkan bukan hanya nama saja tp di tambah dengan fild lain,

    BalasHapus
    Balasan
    1. mas fahmi, untuk autocomplete disini tidak bisa, karena menggunakan textbox. kalau mau bisa menggunakan combobox. itu bisa menampilkan beberapa field.

      Hapus
  5. Assalamualaikum.Wr.Wb
    Kang Asep saya mau tanya bagaimana cara isi data baru kedalam datagridview yang telah terisi data dari table mysql server.

    BalasHapus
  6. Wa'alikum salaam. Mas Bayu coba pakai ini :
    dim row as integer

    datagridview2.rows.insert(row,data1,data2,data3) ' memasukkan data kedalam grid

    sementara untuk koneksi ke mysql mas bayu bisa lihat di bahasan koneksi ke mysql

    kalau kurang jelas, bisa komen lagi..

    wassalam

    BalasHapus
  7. mau tanya dong,

    gimana cara menampilkan data terakhir pada database access ke textbox,
    misalnya dalam satu tabel database ada banyak kolom data seperti ID, NAMA, ALAMAT.
    nah gimana caranya untuk menampilkan data terakhir dari kolom data NAMA saja pada satu textbox?
    Terima kasih.

    BalasHapus
    Balasan
    1. Mas Yudi, Pake Query sbb : Select Top 1 Nama From Karyawan order by ID Desc. Maka akan ditampilkan Nama Karyawan di row terakhir. Untuk mengambil data ke textbox sudah dijelaskan. tinggal copy Paste aja..

      Hapus
  8. Assalamualaikum Mas Asep Aan Permana Baik mau tanya.autocomplete datagridview dimulai isi Kd_Brg otomatis Nm_Brg, Satuan-Brg, Hrg_Jual terisi. trims

    BalasHapus
  9. mas midtoss tolong , pertanyanannya diperjelas

    BalasHapus
  10. kang bagaimana caranya menampilkan data dari database ke textbox?

    BalasHapus
    Balasan
    1. Buat Procedure Getdata
      Untuk Query disesuaikan kebutuhan

      Private Sub GetData
      dim SQLstring as string

      SQLString = "Select NmBarang from masterbarang where KdBrg = '" & cmbKdbrg.text & "'"

      CheckConnection()
      PerintahSQL(SQL)

      Dim Baca As SqlClient.SqlDataReader = SQLComm.ExecuteReader(CommandBehavior.CloseConnection)

      Try
      If Baca.HasRows Then
      If Baca.Read Then
      txtNmBrg.text = CFunction.SNull(Baca("NamaBarang")) ..--> Nama Barang dimasukkan ke dalam textbox dengan nama txtNmBrg
      End If
      End If

      Baca = Nothing
      SQLComm.Dispose()
      SQLComm = Nothing
      SQLConn.Close()
      CFunction.FlushMemory()

      Finally
      If Not Baca Is Nothing Then
      Baca.Close()
      Baca = Nothing
      End If
      If Not SQLComm Is Nothing Then
      SQLComm.Dispose()
      SQLComm = Nothing
      End If

      End Try

      End Sub

      untuk pemanggilan procedurenya gunakan command ..--> call getdata()

      Hapus
  11. Bang minta pencerahanya dong,
    Gimana caranya buat koneksi strConn dengan IPServer,Nama Database, User,Pass yang diinputkan dari textbox ?
    Thanks bang

    BalasHapus
    Balasan
    1. Dik Saidatul..Apakah data config ini akan disimpan atau hanya temporary.
      kalau disimpan ke database konsepnya sama dengan proses simpan data, jika hanya temporary menurut saya dibuat deklarasi public untuk ipserver,database,user dan Pass. biasanya disimpan dlam module.
      sebagai contoh :

      Module MdlGlobal

      Public xIPServer as string
      Public xNmDbase as string
      Public xUserDB as String
      Public xPassDB as string

      End Module

      Ketika proses setting config. Textbox masing-masing di hubungkan dengan nama tersebut. Misalnya :
      xIPServer = txtIPServer.Text
      xNmDbase = txtNmDBase.text dst..

      maka ketika pemanggilan query, koneksinya selalu menggunakan variable tersebut.
      untuk cara koneksi, ada di module yang sudah saya bahas..

      mungkin begitu penjelasannya.. jika kurang mengerti, boleh ditanyakan kembali. terima kasih semoga membantu

      Hapus
  12. assalamualaikum,,mas..mau nanya ,,mas..saya lgi buat aplikasi vb net mysql pencarian autocomplete pake dua buah kategori radio button,,mas..kategoriny kode barang sama nama barang,,ketika milih kode barang, wktu di ketikan d pencarian kode barang hasil pencarian di tampilkan pada text box kode barang,nama barang,,harga barang..caranya gimana,,y mas?makasih sebelumnya,,mas..

    BalasHapus
    Balasan
    1. Untuk kasus yang sama sudah dibahas pada komen2 awal Mas Arnaldo, bisa dicek diatas..

      Hapus
  13. Terima kasih pak Asep code nya berhasil saya terapkan, sangat berguna

    BalasHapus
  14. kang saya mau tanya gimana caranya di datagridview ada kode dan nama, kode sudah bisa autocomplete kemudian setelah dipilih hasil pemilihan dari kode itu ditampikan di nama pada datagridview yang sama itu bagaimana ya kang. mohon info nya kan

    BalasHapus
  15. data di datagridnya sudah ada atau belum ?
    kalau saya asumsikan data sudah ada, berarti kursor akan menunjukkan row dari kode yang dipilih. maka perintahnya adalah sbb :

    Private Sub txtKodeBrg_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtKodeBrg.TextChanged
    Dim xloop1 As Integer
    Dim sPola As String
    Dim sbuka As String
    Dim SBetul As Boolean


    sPola = txtKodeBrg.Text + "*"


    For xloop1 = 1 To dgbarang.RowCount - 1
    sbuka = dgbarang.Rows(xloop1 - 1).Cells(1).Value
    SBetul = UCase(sbuka) Like UCase(sPola)

    If SBetul = True Then
    dgbarang.CurrentCell = dgbarang.Item(4, xloop1 - 1)
    Exit Sub
    End If
    Next
    End Sub

    Jika saya asumsikan datanya belum ada, maka

    Private Sub txtKodeBrg_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtKodeBrg.TextChanged
    --- cari data tersebut, kemudian insert ke datagrid
    End Sub

    demikian.. semoga bisa memberikan solusi..

    BalasHapus