Edit data pada ListView

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:

Listview

Tentang Novian Agung
Pengangguran

7 Responses to Edit data pada ListView

  1. mac says:

    tq kang infonya

  2. oyenoyin says:

    trima bgt gan tutorialnya membantu sekali

  3. ogut says:

    perintahnya masih ada yg error.. utnk lt ,amp,Gt maksudnya type variabel apa ??

  4. nutzfamily says:

    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?

  5. Pencari ilmu says:

    Gan, biar columnheaders listview ga bisa di otak-atik ukurannya (klik drag) gimana ya?

  6. Iwan H says:

    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

Tinggalkan Balasan ke oyenoyin Batalkan balasan