REMOVER COLUNA ESPECIFICA NO FLEXGRID

USUARIO.EXCLUIDOS 28/07/2005 00:58:32
#96333
Pessoal,
Tenho um flexgrid que carrega dados de um arquivo. Neste grid o usuário tem a possibilidade de excluir uma linha específica, selecionada por ele (até ai tudo bem). [txt-color=#ff0000]Bom o problema e que até o momento não consegui desenvolver uma rotina que possibilite o usuário excluir um coluna específica.[/txt-color]

Esperoa ajuda de você.
Um abraço a todos...
LCSD 28/07/2005 08:02:22
#96343
WCosta

Bom Dia

No caso, você teria que implementar algo no estilo abaixo:

Retirar a coluna 4 de 7 Colunas


Public Sub RemoveColuna (flxTemp as FlexGrid, rColuna as Integer)

Dim iCol as Integer, iLinha as Integer

For iCol = rColuna to flxTemp.Cols - 2
For iLinha = 1 to flxTemp.Rows-1
flxTemp.TextMatrix(iLinha, iCol) = flxTemp.TextMatrix(iLinha, iCol +1)
Next
Next

End Sub


Eu não testei aqui, mas deve resolver.
[s50]
WEBMASTER 28/07/2005 10:16:32
#96364
Resposta escolhida
Willian,

Bom, vamos antes de tudo a uma explicação.

Os objetos grids do VB geralmente possuem uma propertie chamada colposition, quando colposition é alterada, a coluna faz um "swap" sendo realocada na nova posição que o programa determinou.

Bom, explicado isso, fazer uma coluna ser excluída se torna fácil, pois é só jogar a coluna para a última posição e daí reduzir o número de colunas do flexgrid em -1.



Aqui está o programa que montei para exemplificar como funciona este tipo de rotina, com certeza vai te ajudar a resolver seu problema.

Option Explicit

Private Sub Command1_Click()
If Combo1.ListIndex > -1 Then
RemoverColunaFlexGrid MSFlexGrid1, Combo1.ListIndex
Combo1.RemoveItem Combo1.ListIndex
Combo1.ListIndex = -1
End If
End Sub

Public Sub RemoverColunaFlexGrid(oFlex As MSFlexGrid, iColuna As Integer)
With oFlex
.Redraw = False
If iColuna < .Cols Then
.ColPosition(iColuna) = .Cols - 1
.Cols = .Cols - 1
End If
.Redraw = True
End With
End Sub

Private Sub Form_Load()
Dim FSO As New FileSystemObject
Dim FIL As File
Dim I As Integer


Set FSO = CreateObject("Scripting.FileSystemObject")
MSFlexGrid1.Rows = 1
MSFlexGrid1.Cols = 5
MSFlexGrid1.TextMatrix(0, 0) = "Arquivo"
MSFlexGrid1.TextMatrix(0, 1) = "Tamanho"
MSFlexGrid1.TextMatrix(0, 2) = "Criado em"
MSFlexGrid1.TextMatrix(0, 3) = "Modificado em"
MSFlexGrid1.TextMatrix(0, 4) = "Tipo"
MSFlexGrid1.ColWidth(0) = 2000
MSFlexGrid1.ColWidth(1) = 1000
MSFlexGrid1.ColWidth(2) = 1200
MSFlexGrid1.ColWidth(3) = 1200
MSFlexGrid1.ColWidth(4) = 2200

For Each FIL In FSO.getfolder("c:\").Files
MSFlexGrid1.AddItem FIL.Name & vbTab & FIL.Size & vbTab & Format(FIL.DateCreated, "dd/mm/yyyy") & vbTab & Format(FIL.DateLastModified, "dd/mm/yyyy") & vbTab & FIL.Type
Next

If MSFlexGrid1.Cols > 0 Then
For I = 0 To MSFlexGrid1.Cols - 1
Combo1.AddItem MSFlexGrid1.TextMatrix(0, I)
Next
Combo1.ListIndex = 0
Command1.Enabled = True
End If
End Sub
LCSD 28/07/2005 10:48:46
#96374
WebMaster

Realmente, bem mais simples e menos "braçal"
[s92]
USUARIO.EXCLUIDOS 28/07/2005 11:02:15
#96379
Kepllar e Webmaster
Muito obrigado por me ajudar nesta empreitada.
Tópico encerrado , respostas não são mais permitidas