Suatu ketika saya di beri job oleh atasan untuk membuat sebuah aplikasi yang cara pengunaanya nanti oleh user hanya tinggal klik pada daftar data yang tampil. Saya pikir itu gampang makanya langsung saya katakan "ok pak". Dan 3 hari program pun selesai dan saya presentasikan. Namun saat presentasi ada request pada tampilan data (saya pake listview) yang akan di klik terdapat pilihan dengan combobox karena aktual data lapangan seperti itu (terdapat beberapa pertimbangan untuk memilih data).
Listview dengan combo box???? langsung itu yang terlintas dipikiran saya, agak susah karena pada listview tidak ada fasilitas menampilkan combobox. saya pikir jika saya ganti ke datagrid bakal lama lagi trus data grid gak serapih listview tampilannya. Coba otak-atik program dan alhamdulillah akhirnya ketemu caranya.
Sekedar primbon pribadi aja, berikut saya tuliskan caranya:
- Buat desain form seperti berikut
- Kemudian tuliskan kode berikut untuk mengisi listview ( lebih bagus ngambil data dari database), saya contohkan sebagai berikut agar lebih cepat mengisinya (tanpa harus konek ke database dulu)
Private Sub Form_Load()
Dim i As Integer
Dim myList As ListItem
For i = 1 To 10
Set myList = Me.ListView1.ListItems.Add
myList.SubItems(1) = "Ini Kolom Ke2 Baris " & i
myList.SubItems(2) = "Ini Kolom Ke3 Baris " & i
myList.SubItems(3) = "Ini Kolom Ke4 Baris " & i
myList.SubItems(4) = "Ini Kolom Ke5 Baris " & i
Next
End Sub
Dim i As Integer
Dim myList As ListItem
For i = 1 To 10
Set myList = Me.ListView1.ListItems.Add
myList.SubItems(1) = "Ini Kolom Ke2 Baris " & i
myList.SubItems(2) = "Ini Kolom Ke3 Baris " & i
myList.SubItems(3) = "Ini Kolom Ke4 Baris " & i
myList.SubItems(4) = "Ini Kolom Ke5 Baris " & i
Next
End Sub
- Kemudian kita buat fungsi untuk mendapatkan ukuran dan letak listview agar sesuai dengan
combobox
Function GetKolom(x!) As Long
Dim TempLebar() As Single
Dim TempBatasAwal() As Single
Dim TempBatasAkhir() As Single
Dim Lebar As Single
Dim i As Integer
Dim X1!, X2!
ReDim Preserve TempLebar(0)
TempLebar(0) = 0
For i = 1 To Me.ListView1.ColumnHeaders.Count
ReDim Preserve TempLebar(i)
ReDim Preserve TempBatasAwal(i)
ReDim Preserve TempBatasAkhir(i)
TempLebar(i) = Me.ListView1.ColumnHeaders(i).Width
Lebar = Lebar + TempLebar(i)
TempBatasAwal(i) = Lebar - TempLebar(i) + 1
TempBatasAkhir(i) = Lebar - 1
Next
For i = 1 To Me.ListView1.ColumnHeaders.Count
If x >= TempBatasAwal(i) And x <= TempBatasAkhir(i) Then
GetKolom = i
Exit For
End If
Next
End Function
Function Baris() As Long
Baris = Me.ListView1.ListItems(ListView1.SelectedItem.Index).Index
End Function
Dim TempLebar() As Single
Dim TempBatasAwal() As Single
Dim TempBatasAkhir() As Single
Dim Lebar As Single
Dim i As Integer
Dim X1!, X2!
ReDim Preserve TempLebar(0)
TempLebar(0) = 0
For i = 1 To Me.ListView1.ColumnHeaders.Count
ReDim Preserve TempLebar(i)
ReDim Preserve TempBatasAwal(i)
ReDim Preserve TempBatasAkhir(i)
TempLebar(i) = Me.ListView1.ColumnHeaders(i).Width
Lebar = Lebar + TempLebar(i)
TempBatasAwal(i) = Lebar - TempLebar(i) + 1
TempBatasAkhir(i) = Lebar - 1
Next
For i = 1 To Me.ListView1.ColumnHeaders.Count
If x >= TempBatasAwal(i) And x <= TempBatasAkhir(i) Then
GetKolom = i
Exit For
End If
Next
End Function
Function Baris() As Long
Baris = Me.ListView1.ListItems(ListView1.SelectedItem.Index).Index
End Function
- Lalu buat fungsi yang tujuannya agar saat kolom listview di klik, maka akan tampil
combobox pada baris tersebut
Sub EditList()
On Error Resume Next
Dim myList As ListItem
Set myList = Me.ListView1.SelectedItem
If myList Is Nothing Then Exit Sub
Me.Combo1.Visible = False
With Me.ListView1
Me.Combo1.Left = .Left + .ColumnHeaders(Kolom).Left + 130
Me.Combo1.Top = .Top + myList.Top + 70
Me.Combo1.Width = .ColumnHeaders(Kolom).Width - 50
If Kolom > 1 Then
Me.Combo1.Text = myList.SubItems(Kolom - 1)
Else
Me.Combo1.Text = myList.Text
End If
Me.Combo1.Visible = True
Me.Combo1.SetFocus
End With
End Sub
On Error Resume Next
Dim myList As ListItem
Set myList = Me.ListView1.SelectedItem
If myList Is Nothing Then Exit Sub
Me.Combo1.Visible = False
With Me.ListView1
Me.Combo1.Left = .Left + .ColumnHeaders(Kolom).Left + 130
Me.Combo1.Top = .Top + myList.Top + 70
Me.Combo1.Width = .ColumnHeaders(Kolom).Width - 50
If Kolom > 1 Then
Me.Combo1.Text = myList.SubItems(Kolom - 1)
Else
Me.Combo1.Text = myList.Text
End If
Me.Combo1.Visible = True
Me.Combo1.SetFocus
End With
End Sub
-Panggil fungsi -fungsi diatas dengan menuliskan kode berikut:
Private Sub ListView1_Mouseup(Button As Integer, _
Shift As Integer, x As Single, y As Single)
Kolom = GetKolom(x)
EditList
End Sub
Shift As Integer, x As Single, y As Single)
Kolom = GetKolom(x)
EditList
End Sub
- Tuliskan kode berikut untuk menjadikan isi listview berubah sesuai text pada combobox yang kita pilih
Private Sub Combo1_Click()
Set myList = Me.ListView1.ListItems(Baris())
If Kolom > 1 Then
myList.SubItems(Kolom - 1) = Me.Combo1.Text
Else
myList.Text = Me.Combo1.Text
End If
End Sub
Private Sub Combo1_GotFocus()
With Me.Combo1
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub
Private Sub Combo1_KeyPress(KeyAscii As Integer)
If (KeyAscii = 13) Then
Combo1.Visible = False
End If
End Sub
Set myList = Me.ListView1.ListItems(Baris())
If Kolom > 1 Then
myList.SubItems(Kolom - 1) = Me.Combo1.Text
Else
myList.Text = Me.Combo1.Text
End If
End Sub
Private Sub Combo1_GotFocus()
With Me.Combo1
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub
Private Sub Combo1_KeyPress(KeyAscii As Integer)
If (KeyAscii = 13) Then
Combo1.Visible = False
End If
End Sub
- Selesai,,,,,,,,, dan tampilannya seperti berikut:
*) o ya, comboboxnya saya isi
==== Kalo kurang jelas silahkan tinggalkan pesan di kotak komentar,,,
mantap gan, ane nyari dari kemaren yang kaya gnian tapi baru ktemu sekarang,,
BalasHapusane coba gan, thx
ok gan, semoga membantu,,,
Hapusmas maaf mau tanya, itu kalo pake textbox bisa ga? caranya piye?? soale aku cuma pengen edit data yang ada di listview..
BalasHapustrims
Bisa,
Hapusganti ja combo dengan textbox trus sesuaiin kode programnya jadi textbox.
ok sama-sama semoga membantu
MAFF MAU TANYA Gan
BalasHapuskalo datanya dari database acess 2002-2003 gmn source code nyaa
thanks