FLEXGRID GRID COM CHECKBOX - PARCELAS

WEBIER 15/02/2011 19:48:22
#365551
Pessoal tenho um local para dar baixa nas parcelas de meus clientes

Digito o nome de meu cliente e aparece num flexgrid todas as parcelas dele em aberto...

Ai dou um duplo-clique na linha da parcela que desejo quitar... ai vai o codigo da parcela para um textbox...

ai clico no botão QUITAR e aquela parcela com aquele código é quitado.

código do botao QUITAR
    execSQL [Ô]UPDATE PARCELAS SET STATUS = 1 , VALOR_FINAL = [ô][Ô] & Format(txtTotal.Text, [Ô]##,##0.00[Ô]) & [Ô][ô] , PAGAMENTO = #[Ô] & Format(mskPagamento.Text, [Ô]mm/dd/yyyy[Ô]) & [Ô]#, HORA = #[Ô] & Format(lblHora.Caption, [Ô]hh:mm[Ô]) & [Ô]#, JUROS = [ô][Ô] & Format(txtTJuros.Text, [Ô]##,##0.00[Ô]) & [Ô][ô], DIAS_ATRAZO = = [Ô] & txtDias.Text & [Ô] WHERE COD_PEDIDO = [Ô] & txtCodPedido.Text & [Ô] AND NUMERO = [Ô] & txtNumParcela.Text


ai meu cliente me pediu uma forma de poder dar baixar e mais de uma parcela por vez, ai pensei no flexgrid com checkbox para marcar somente as parcelas que desejo QUITAR.

Alguem tem algum projeto assim ou sabe onde posso encontrar?
MARCELO.TREZE 15/02/2011 20:21:28
#365554
talvez os colegas indiquem uma maneira usando o checkbox dentro da celula, porém eu indicaria vc colocar uma fonte grafica (wingding 2) onde o simbulo (£) indica o check desmarcado e o (R) [Ô]erre maiusculo[Ô] o check marcado.

bom veja o exemplo

coloque um msflexgrid em um novo projeto e cole o código a seguir

Private Sub Form_Load()
With MSFlexGrid1
.FixedCols = 0
.FixedRows = 1
.Rows = 5
.Cols = 3
.FormatString = [Ô] |codigo|nome [Ô]
.Font.Size = 12
For f = 1 To .Rows - 1
.TextMatrix(f, 0) = [Ô]£[Ô]
.TextMatrix(f, 1) = [Ô]000[Ô] & f
.TextMatrix(f, 2) = [Ô]produto[Ô] & f
.Col = 0
.Row = f
.CellFontName = [Ô]Wingdings 2[Ô]
Next f

End With
End Sub


Private Sub MSFlexGrid1_Click()
With MSFlexGrid1
.Row = .RowSel
If .TextMatrix(.RowSel, 0) = [Ô]£[Ô] Then
.TextMatrix(.RowSel, 0) = [Ô]R[Ô]
Else
.TextMatrix(.RowSel, 0) = [Ô]£[Ô]
End If
End With
End Sub


só lembrando o msflexgrid não possui checkbox

para saber quais checkbox foram selecionados bastaria verificar quais linhas da coluna zero possuem a letra erre

veja

inclua um command button e cole

Private Sub Command1_Click()
Dim marcadas As String
For f = 1 To MSFlexGrid1.Rows - 1
If MSFlexGrid1.TextMatrix(f, 0) = [Ô]R[Ô] Then
marcadas = marcadas & MSFlexGrid1.TextMatrix(f, 2) & vbCrLf
End If
Next f
MsgBox marcadas
End Sub


espero que vc tenha entendido a lógica
WEBIER 20/02/2011 00:07:04
#366010
baseado na ideia de colocar algo na linha do grid da parcela que desejo alterar eu fiz assim (peguei esse exemplo na net):

Private Sub Grid_Parcelas_Click()
[ô]marcar a parcela
If Grid_Parcelas.CellPicture = 0 Then
Set Grid_Parcelas.CellPicture = picImprimir.Image
Grid_Parcelas.CellPictureAlignment = flexAlignCenterCenter
Else
Set Grid_Parcelas.CellPicture = Nothing
End If
end sub


a ideia é a seguinte: Toda linha do grid que eu clicar, ele vai colocar uma imagem (picImprimir)... ESTÁ FUNCIONANDO!

Surgir uma duvida:
Antigamente eu clicava na linha da parcela que queria mudar e automaticamente algumas objetos no meu form era preenchido com informações dessa linha, exemplo:
Private Sub Grid_Parcelas_Click()
txtCodParc.Text = (Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 1))
txtCodOS.Text = (Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 2))
txtCodPedido.Text = Format((Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 3)), [Ô]000000[Ô])
txtNumParcela.Text = (Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 4))
mskData.Text = (Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 5))
txtValor.Text = (Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 6))
End Sub


ai eu clica num botão e ele usava esses dados dos objetos preenchidos para localicar e alterar a parcela, exemplo:
execSQL [Ô]UPDATE PARCELAS SET STATUS = TRUE, PAGAMENTO = #[Ô] & Format(mskPagamento.Text, [Ô]mm/dd/yyyy[Ô]) & [Ô]#, HORA = #[Ô] & Format(lblHora.Caption, [Ô]hh:mm[Ô]) & [Ô]# WHERE COD_OS = [Ô] & txtCodOS.Text & [Ô] AND NUMERO = [Ô] & txtNumParcela.Text


Ou seja, ele mudava o campo STATUS para TRUE e colocava a data e a hora do pagamento na parcela que tivesse aquele COD_OS e aquele NUMERO.

Ai me surgiu a duvida, se eu marcar 3 parcelas e mandar ele fazer isso, como ficaria o codigo?
ele teria que pegar o COD_OS e o NUMERO da Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 3) e da Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 4) de cada linha(somente as que tivesse a imagem (picImprimir) na linha)....

como ficaria esse loop ?

WEBIER 21/02/2011 14:05:27
#366127
alguem pode me ajudar com essa duvida que postei por ultimo?
TECLA 21/02/2011 14:07:24
#366128
MARCELO.TREZE 21/02/2011 15:39:07
#366142
Resposta escolhida
ficaria algo mais ou menos assim

With Grid_Parcelas
For F=1 To .Rows - 1
.Col = 0
.Row = F
If .CellPicture <> 0 Then
[ô]aqui vc colocaria o seu código de update informando a linha
[ô]ao invés de colocar por exemplo [txt-color=#e80000]PAGAMENTO = #[Ô] & Format(mskPagamento.Text, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[/txt-color]

vc faria informando os dados direto do grid assim [txt-color=#e80000]PAGAMENTO = #[Ô] & Format(.TextMatrix(F, 0), [Ô]mm/dd/yyyy[Ô]) & [Ô]#[/txt-color]
bstando informar o numero da coluna
End If
WEBIER 23/02/2011 17:36:01
#366401
to quase terminando aqui a parada...

agora me surgiu uma duvida, como faço para pegar os dados de uma linha no grid sem ter q clicar nela...

ou seja, quero pegar os seguintes dados da linha do grid que tiver com a imagem ImgMarcada

exemplo:
Imagina que no grid tem 10 linhas... todas com uma imagem chamada imgDesmarcada... ai eu clico numa linha e ele muda a imagem para ImgMarcada... as outras 9 linhas estão com a imgDesmarcada e somente 1 linha tá com ImgMarcada.

como faço para preencher os objetos do meu form com as informações da linha que tá com a imagem marcada?

exemplo:

    txtCodParc.Text = (Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 1))
txtCodOS.Text = (Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 2))
txtCodPedido.Text = Format((Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 3)), [Ô]000000[Ô])
txtNumParcela.Text = (Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 4))
mskData.Text = (Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 5))
txtValor.Text = (Grid_Parcelas.TextMatrix(Grid_Parcelas.Row, 6))


pensei em algo do tipo:

if Grid_Parcelas.CellPicture = ImgMarcada then faz tal coisa


mas nao conseguir...

como seria isso?
MARCELO.TREZE 23/02/2011 17:50:18
#366405
vc faria um Loop

For F = 0 To Grid_Parcelas.Rows - 1
Grid_Parcelas.Row = F
Grid_parcelas.Col = 0
if Grid_Parcelas.CellPicture = ImgMarcada then
ai exibe
end if
Next F

WEBIER 23/02/2011 19:23:12
#366416
Deu certinho....

agora to com duvida na parte de fazer o loop para atualizar os registros...

eu fiz assim:
Private Sub cmdQuitarTodas_Click()
Dim f As Integer
With Grid_Parcelas
For f = 1 To .Rows - 1
.Col = 0
.Row = f
If .CellPicture = ImgMarcada Then
execSQL [Ô]UPDATE PARCELAS SET STATUS = TRUE WHERE COD_PEDIDO = [Ô] & .TextMatrix(.Rows - f, 3) & [Ô] AND NUMERO = [Ô] & .TextMatrix(.Rows - f, 4)
End If
Next
End With
End Sub


a ideia seria pegar todos os que tem a imagem ImgMarcada e mudar o campo STATUS para TRUE, pegando o COD_PEDIDO e o NUMERO que está naquela linha nas colunas 3 e 4.

fiz isso dai, mas nao dar nada... nem erro e nem altera...
Tópico encerrado , respostas não são mais permitidas