FLEXGRID GRID COM CHECKBOX - PARCELAS
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
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?
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?
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
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
espero que vc tenha entendido a lógica
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
baseado na ideia de colocar algo na linha do grid da parcela que desejo alterar eu fiz assim (peguei esse exemplo na net):
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:
ai eu clica num botão e ele usava esses dados dos objetos preenchidos para localicar e alterar a parcela, exemplo:
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 ?
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 ?
alguem pode me ajudar com essa duvida que postei por ultimo?
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
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
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:
pensei em algo do tipo:
mas nao conseguir...
como seria isso?
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?
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
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
Deu certinho....
agora to com duvida na parte de fazer o loop para atualizar os registros...
eu fiz assim:
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...
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