Jump to content
Windows Dragon

Remover uma row de uma DataGridView

Recommended Posts

Windows Dragon

Boas pessoal eu tenho este codigo

Protected Overrides Sub WndProc(ByRef M As System.Windows.Forms.Message)

        On Error Resume Next

        If M.Msg = WM_DEVICECHANGE Then

            Select Case M.WParam


                Case DBT_DEVICEARRIVAL

                    Dim DevType As Integer = Marshal.ReadInt32(M.LParam, 4)

                    If DevType = DBT_DEVTYP_VOLUME Then

                        Dim Vol As New DEV_BROADCAST_VOLUME

                        Vol = Marshal.PtrToStructure(M.LParam, GetType(DEV_BROADCAST_VOLUME))

                        If Vol.Dbcv_Flags = 0 Then

                            For i As Integer = 0 To 20

                                If Math.Pow(2, i) = Vol.Dbcv_Unitmask Then
                                   'Parte 1 - Adicionar uma ROW com a informação da PEN
                                    Dim Usb As String = Chr(65 + i) + ":\"
                                    Dim Disco As New System.IO.DriveInfo(Usb)                                   
                                    Dim dname As String
                                    If Disco.VolumeLabel = Nothing Then
                                        dname = "USB Drive"
                                    Else
                                        dname = Disco.VolumeLabel
                                    End If
                                    Dim row1 As String() = New String() {Usb, dname, Numeric2Bytes(Disco.AvailableFreeSpace), Numeric2Bytes(Disco.TotalSize)}
                                    Dim rows As Object() = New Object() {row1}

                                    Dim rowArray As String()
                                    For Each rowArray In rows
                                        DataGridView1.Rows.Add(rowArray)
                                    Next

                                    Exit For

                                End If

                            Next

                        End If

                    End If

                    '



                Case DBT_DEVICEREMOVECOMPLETE

                    Dim DevType As Integer = Marshal.ReadInt32(M.LParam, 4)

                    If DevType = DBT_DEVTYP_VOLUME Then

                        Dim Vol As New DEV_BROADCAST_VOLUME

                        Vol = Marshal.PtrToStructure(M.LParam, GetType(DEV_BROADCAST_VOLUME))

                        If Vol.Dbcv_Flags = 0 Then

                            For i As Integer = 0 To 20

                                If Math.Pow(2, i) = Vol.Dbcv_Unitmask Then

                                    Dim Usb As String = Chr(65 + i) + ":\"
                                   ' Parte 2
                                   ' Codigo para remover a row epessifica

                                    Exit For

                                End If

                            Next

                        End If

                    End If

            End Select

        End If

        MyBase.WndProc(M)

    End Sub

O que é o codigo... Basicamente é quando eu ligo uma pen aparece-me no ambiente de trabalho a informação da pen... e está tudo a funcionar... excepto quando quero remover a row de quando desligo a pen. Porque não consigo remover a row que corresponde á PEN ou Disco USB que foi desligado... alguma ajuda?

Share this post


Link to post
Share on other sites
Caça

O código para remover é parecido ao de adicionar

DataGridView1.Rows.Remove()
'Ou
DataGridView1.Rows.RemoveAt()


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Windows Dragon

Pois mas isso remove pelo index... e a unica informação que tenho é a letra da drive que foi desligada que está numa row.... mas como obtenho o index da row que tem essa drive?

Share this post


Link to post
Share on other sites
Caça

Pode fazer tipo isto

        For Each L As DataGridViewRow In DataGridView1.Rows
            If L.Cells(0).Value = "D:" Then
                DataGridView1.Rows.Remove(L)
                Exit For
            End If
        Next


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.