Edit data pada ListView
17 November 2008 7 Komentar
Bisakah kita mengedit cell pada ListView? Bisa saja kalau yang ingin diubah adalah cell-cell pada kolom pertama, karena ListView menyediakan properti “LabelEdit”, tapi kalau yang ingin diubah adalah data pada kolom selain kolom pertama? Tidak bisa, kecuali Anda menggunakan teknik seperti di bawah ini:
Buatlah projek baru dengan pola “VBEnterpriseEdition Control”. Masukan sebuah ListView ke dalam form, klik kanan pada ListView tersebut (ListView yang sudah ditempatkan di form), pilih menu Properties. Pada dialog yang ditampilkan, klik tab “Column Header”, klik tombol “Insert Column” sebanyak 5 (lima) kali. Klik tab General, ubah properti “View” dengan “3-lvwReport”, properti “LabelEdit” dengan “1-lvwManual”, tandai checkbox “FulRowSelect”, tandai juga checkbox “Gridlines”.
Tambahkan sebuah TextBox pada form, ubah name menjadi “txtEdit”. “BorderStyle” dengan “0-None”, dan “Visible” dengan “False”.
Ketik kode di bawah ini:
Option Explicit Private Declare Function SendMessage Lib "user32" Alias _ "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Private posX! Private posY! Dim myList As ListItem Private Sub Form_Load() Dim i As Integer Dim myList As ListItem For i = 1 To 10 Set myList = Me.ListView1.ListItems.Add(, , i) myList.SubItems(1) = "Kolom 2 Baris " & i myList.SubItems(2) = "Kolom 3 Baris " & i myList.SubItems(3) = "Kolom 4 Baris " & i myList.SubItems(4) = "Kolom 5 Baris " & i Next End Sub Function Kolom(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 Kolom = i Exit For End If Next End Function Function Baris(y!) As Long Baris = Me.ListView1.HitTest(1, y) End Function Sub EditList(x!, y!) On Error Resume Next Dim myList As ListItem Set myList = Me.ListView1.SelectedItem If myList Is Nothing Then Exit Sub Me.txtEdit.Visible = False With Me.ListView1 Me.txtEdit.Left = .Left + .ColumnHeaders(Kolom(x)).Left + 70 Me.txtEdit.Top = .Top + myList.Top + 70 Me.txtEdit.Width = .ColumnHeaders(Kolom(x)).Width - 50 If Kolom(x) > 1 Then Me.txtEdit.Text = myList.SubItems(Kolom(x) - 1) Else Me.txtEdit.Text = myList.Text End If Me.txtEdit.Visible = True Me.txtEdit.SetFocus End With End Sub Private Sub ListView1_MouseDown(Button As Integer, _ Shift As Integer, x As Single, y As Single) End Sub Private Sub ListView1_Mouseup(Button As Integer, _ Shift As Integer, x As Single, y As Single) posX = x posY = y EditList posX, posY End Sub Private Sub txtEdit_Change() Set myList = Me.ListView1.ListItems(Baris(posY)) If Kolom(posX) > 1 Then myList.SubItems(Kolom(posX) - 1) = Me.txtEdit.Text Else myList.Text = Me.txtEdit.Text End If End Sub Private Sub txtEdit_GotFocus() With Me.txtEdit .SelStart = 0 .SelLength = Len(.Text) End With End Sub
Coba jalankan program, klik sebuah cell tertentu, kemudian coba untuk mengganti teks pada cell tersebut.
Sampel kode bisa diambil di:
tq kang infonya
trima bgt gan tutorialnya membantu sekali
perintahnya masih ada yg error.. utnk lt ,amp,Gt maksudnya type variabel apa ??
Terima kasih infonya. Sudah diperbaiki. Itu karena plugin wordpress 😀
gan,,kalo cma bsa edit 1 data doang yg d listview sdangkan data yg lain gbs d klik tuh slah d bag mna?
contoh : ad 3 data ,, pas nge-klik ListView nya focus d satu dta pluing bwah n data yg lain gbs d klik.
ap slah d set focusny?(listview kn gk ad setfocus buat data)
ap koneksi k databasenya?
Gan, biar columnheaders listview ga bisa di otak-atik ukurannya (klik drag) gimana ya?
bagus gan, cuma saya bingung supaya bisa navigate vbkeyleft dan vbkeyright pake coding apa yah dan suapa columnheader 2 dan 4 saja yg bisa diedit, thx. untuk vbkeydown dan vbkeyup nya saya sudah ketemu