CHECKBOX DATAGRIDVIEW

 Tópico anterior Próximo tópico Novo tópico

CHECKBOX DATAGRIDVIEW

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#483747 - 08/08/2018 13:15:54

GUILHERMECSOUZA
DIVINOPOLIS
Cadast. em:Janeiro/2017


Boa tarde pessoal, estou com uma dificuldade da seguinte forma.
Tenho um datagriview e a primeira coluna tem um checkbox.

Gostaria que assim que eu clicar no checkbox para deixar ele true ja somar o valor de uma coluna x em um TextBox. qual evento melhor a usar para chamar esta função?

tenho essa sub aqui:

Sub calcula()
        Dim total, pedidos, frete As Decimal
        total = 0
        pedidos = 0
        frete = 0
        TextBox1.Text = total
        TextBoxXP8.Text = pedidos
        TextBoxXP7.Text = frete

        For i = 0 To dg_pedidos_liberar.Rows.Count - 1
            If dg_pedidos_liberar.Rows(i).Cells(0).Value IsNot DBNull.Value Then
                If CType(dg_pedidos_liberar.Item(0, i).Value, Boolean) = True Then
                    pedidos += 1
                    total += dg_pedidos_liberar.Item(8, i).Value
                    TextBox1.Text = total.ToString("N")
                    TextBox1.Refresh()
                    TextBoxXP8.Text = pedidos
                    TextBoxXP8.Refresh()
                    frete += CDec(dg_pedidos_liberar.Rows(i).Cells("VLfrete").Value.ToString) * 100
                    TextBoxXP7.Text += frete
                    TextBoxXP7.Refresh()
                End If
            End If

        Next
        TextBox1.Refresh()

        TextBoxXP8.Refresh()
    End Sub


ja tentei colocar isso no evento do datagrid CellContentClick.


desde ja agradeço a atenção.



#483759 - 08/08/2018 17:22:55

TUNUSAT
SAMPA
Cadast. em:Dezembro/2003


Última edição em 08/08/2018 17:35:11 por TUNUSAT

 Anexos estao visíveis somente para usuários registrados

GUILHERMECSOUZA,

   Muito legal sua pergunta.  Eu fiquei encucado.
   Montei um exemplo que coloquei aqui.
   O problema é que ao clicar na "CheckBox" a linha fica em "estado de edição" (aparece um lápis ao lado esquerdo da linha) e mesmo rodando a rotina "Calcula" não atualiza as textBox... parece estranho, né?

   Procurei algumas respostas em alguns sites, mas não achei nada efetivo (para meu gosto). veja:

==================================
clicar no datagrid e pegar a linha selecionada
https://social.msdn.microsoft.com/Forums/pt-BR/2b228da1-c8de-4a2e-8639-54e17f5d9cc2/clicar-no-datagrid-e-pegar-a-linha-selecionada?forum=vscsharppt
==================================
Selecionar Conteúdo - DataGridView (C#)
https://social.msdn.microsoft.com/Forums/pt-BR/ffca051f-f373-4472-853f-b6c3379d94b5/selecionar-contedo-datagridview-c?forum=clientept
==================================

   Eu gostaria de saber qual é a ordem de prioridade dos eventos da DataGridView...

   ..não pode ter um botão para totalizar?!?

   TALVEZ... trapaceando com um lance assíncrono... veja:

==================================
VB .NET - Usando o controle BackgroundWorker
http://www.macoratti.net/vbn5_ept.htm
==================================

    Veja também:

==================================
VB .NET - Trabalhando com DataGridView Dinâmico
http://www.macoratti.net/17/04/vbn_dgvd1.htm
==================================

    Desculpe não conseguir ajudar...

[]'s,
Tunusat.


Haja, pois, o que houver, ampliem-se obstáculos, agigantem-se problemas, intensifiquem-se lutas ou se agravem provações, trabalha sempre no bem de todos, porque, trabalhando na Seara do Bem, podes conservar a certeza de que Deus te sustentará. Emmanuel.

Resposta escolhida #483776 - 09/08/2018 10:54:12

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Uma vez, fiz assim (com o evento CellClick):

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{
    // verifica se o grid não tem registros
    if (dgv.Rows.Count == 0)
    {
        return;
    }
    // se clicar na coluna check (que é a coluna 0 (zero))
    if (dgv.CurrentCell.ColumnIndex.Equals(0))
    {
         // se a coluna estiver checada (true), torna-a não checada (false)
         if (dgv.CurrentRow.Cells[0].Value.Equals(true))
         {
             dgv.CurrentRow.Cells[0].Value = false;
         }
         // se a coluna não estiver checada (false), torna-a checada (true)
         else
         {
             dgv.CurrentRow.Cells[0].Value = true;
         }
    }
    // chama a rotina que faz a soma da coluna desejada
    SomaSelecionados();
}

private void SomaSelecionados()
{
    // soma os registros selecionados e, se houver algum selecionado, habilita o botão para Confirmar
    double _selecionados = 0;
    for (int i = 0; i < dgv.Rows.Count; i++)
    {
         // se a coluna Check estiver checada (true), soma a coluna "ValorLiquido" e guarda na variável _selecionados
         if (dgv.Rows[i].Cells[0].Value.Equals(true))
        {
             _selecionados += Convert.ToDouble(dgv.Rows[i].Cells["ValorLiquido"].Value);
        }
    }
    // "joga" o valor somado na TextBox "txtValorCredito"
    txtValorCredito.Text = string.Format("{0:###,##0.00}", _selecionados);
    // se a TextBox não tiver valor, não habilita o botão Confirmar
    if (txtValorCredito.Text == "0,00")
    {
        btnConfirmar.Enabled = false;
    }
    else
    {
        btnConfirmar.Enabled = true;
    }
}


Espero ter ajudado.

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#483796 - 10/08/2018 00:44:55

GUILHERMECSOUZA
DIVINOPOLIS
Cadast. em:Janeiro/2017


Citação:
:
GUILHERMECSOUZA,

   Muito legal sua pergunta.  Eu fiquei encucado.
   Montei um exemplo que coloquei aqui.
   O problema é que ao clicar na "CheckBox" a linha fica em "estado de edição" (aparece um lápis ao lado esquerdo da linha) e mesmo rodando a rotina "Calcula" não atualiza as textBox... parece estranho, né?

   Procurei algumas respostas em alguns sites, mas não achei nada efetivo (para meu gosto). veja:

==================================
clicar no datagrid e pegar a linha selecionada
https://social.msdn.microsoft.com/Forums/pt-BR/2b228da1-c8de-4a2e-8639-54e17f5d9cc2/clicar-no-datagrid-e-pegar-a-linha-selecionada?forum=vscsharppt
==================================
Selecionar Conteúdo - DataGridView (C#)
https://social.msdn.microsoft.com/Forums/pt-BR/ffca051f-f373-4472-853f-b6c3379d94b5/selecionar-contedo-datagridview-c?forum=clientept
==================================

   Eu gostaria de saber qual é a ordem de prioridade dos eventos da DataGridView...

   ..não pode ter um botão para totalizar?!?

   TALVEZ... trapaceando com um lance assíncrono... veja:

==================================
VB .NET - Usando o controle BackgroundWorker
http://www.macoratti.net/vbn5_ept.htm
==================================

    Veja também:

==================================
VB .NET - Trabalhando com DataGridView Dinâmico
http://www.macoratti.net/17/04/vbn_dgvd1.htm
==================================

    Desculpe não conseguir ajudar...

[]'s,
Tunusat.


TUNUSAT, muito obrigado por sua disposição de ajudar.

resolvi a forma que gostaria, eu fiz com a dica do PERCIFILHO

muito obrigado novamente.



#483797 - 10/08/2018 00:47:39

GUILHERMECSOUZA
DIVINOPOLIS
Cadast. em:Janeiro/2017


Citação:
:
Uma vez, fiz assim (com o evento CellClick):

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e)
{
    // verifica se o grid não tem registros
    if (dgv.Rows.Count == 0)
    {
        return;
    }
    // se clicar na coluna check (que é a coluna 0 (zero))
    if (dgv.CurrentCell.ColumnIndex.Equals(0))
    {
         // se a coluna estiver checada (true), torna-a não checada (false)
         if (dgv.CurrentRow.Cells[0].Value.Equals(true))
         {
             dgv.CurrentRow.Cells[0].Value = false;
         }
         // se a coluna não estiver checada (false), torna-a checada (true)
         else
         {
             dgv.CurrentRow.Cells[0].Value = true;
         }
    }
    // chama a rotina que faz a soma da coluna desejada
    SomaSelecionados();
}

private void SomaSelecionados()
{
    // soma os registros selecionados e, se houver algum selecionado, habilita o botão para Confirmar
    double _selecionados = 0;
    for (int i = 0; i < dgv.Rows.Count; i++)
    {
         // se a coluna Check estiver checada (true), soma a coluna "ValorLiquido" e guarda na variável _selecionados
         if (dgv.Rows[i].Cells[0].Value.Equals(true))
        {
             _selecionados += Convert.ToDouble(dgv.Rows[i].Cells["ValorLiquido"].Value);
        }
    }
    // "joga" o valor somado na TextBox "txtValorCredito"
    txtValorCredito.Text = string.Format("{0:###,##0.00}", _selecionados);
    // se a TextBox não tiver valor, não habilita o botão Confirmar
    if (txtValorCredito.Text == "0,00")
    {
        btnConfirmar.Enabled = false;
    }
    else
    {
        btnConfirmar.Enabled = true;
    }
}


Espero ter ajudado.


PERCIFILHO, obrigado por sua dica. funcionou perfeitamente. vou deixar aqui a forma que eu fiz.


Private Sub dg_pedidos_liberar_CellClick_1(sender As Object, e As DataGridViewCellEventArgs) Handles dg_pedidos_liberar.CellClick

        If dg_pedidos_liberar.Rows.Count = 0 Then
            Return
        End If

        'se clicar na coluna check (que é a coluna 0 (zero))
        If dg_pedidos_liberar.CurrentCell.ColumnIndex.Equals(0) Then

            'se a coluna estiver checada (true), torna-a não checada (false)
            If dg_pedidos_liberar.CurrentRow.Cells(0).Value.Equals("True") Then
                dg_pedidos_liberar.CurrentRow.Cells(0).Value = False
            Else
                dg_pedidos_liberar.CurrentRow.Cells(0).Value = True
            End If

            'SomaSelecionados()
            calcula()


        End If

    End Sub


sub calcula()
For i = 0 To dg_pedidos_liberar.Rows.Count - 1

            If dg_pedidos_liberar.Rows(i).Cells(0).Value.Equals("True") Then
                pedidos += 1
                total += dg_pedidos_liberar.Item(9, i).Value
                TextBox1.Text = total.ToString("N")
                TextBox1.Refresh()
                TextBoxXP8.Text = pedidos
                TextBoxXP8.Refresh()
                frete += CDec(dg_pedidos_liberar.Rows(i).Cells("VLfrete").Value.ToString) * 100
                TextBoxXP7.Text += frete
                TextBoxXP7.Refresh()
            End If

        Next



        If pedidos > 0 Then
            btn_autoriza.Enabled = True
        End If

        TextBox1.Refresh()

        TextBoxXP8.Refresh()
end sub







 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por GUILHERMECSOUZA em 10/08/2018 00:48:14