none
C# - RADIOBUTTON x BANCO DE DADOS SQL 2005 RRS feed

  • Pergunta

  • Bom dia

    Como faço para implementar o seguinte:

    Tenho dados, em textbox, tipo valor, data de vencimento e data de pagamento, que exibo numa datagridview e uma quarta opção com dois radiobuttons do tipo um para Pagamento efetuado, o primeiro radiobutton sim e outro radiobutton para  Não.

    Como faço para quando o usuário clicar no sim, está informação for para o banco e lançar na coluna criada (pago) como sim e se clicar no radibutton Não, lançar na coluna do Banco (nãoPago)como não? e, que tipo de dados eu crio no banco para estas colunas? (pago, naoPago)?

    Não estou conseguindo implementar esta rotina (radiobutton)

    Grato

    Dilson

    quarta-feira, 23 de janeiro de 2013 11:13

Todas as Respostas

  • Bom dia Dilson,

    Existem alguns modos ex:

    qual é o tipo de dados da sua coluna no bd ? smallint ( 0 - 1 ) , varchar ( S - N ) ?

    apartir disso você interpreta como subir para o banco de dados os valores do radio:

    se o se o radio pago estier marcado como sim você sobe, por exemplo 'S' no bd, caso contrário você sobe 'N' (o mesmo vale para 0 e 1, assim você consegue controlar o verdadeiro ou falso facilmente.

    Espero ajudar,

    Abraços,

    Afonso

    quarta-feira, 23 de janeiro de 2013 13:10
  • Sim a, até aí eu entendi, mas ocorre o seguinte:

    Quando insiro os valores no banco, eu os busco no datagrid, no evento do radio Button, caso marcado, eu tento buscar pelo código abaixo, só que quando consulto de novo não aparece nada nesta coluna e não dá nenhum erro?

    Convert.ToString(dgvDespesa.Rows[dgvDespesa.CurrentRow.Index].Cells[“pago”].Value)= "S";

    Daí eu não consigo sair.....????

    quarta-feira, 23 de janeiro de 2013 13:31
  • a celula pago está marcada como DataGridViewCheckBoxColumn ?

    se for é melhor usar:

    dgvDespesa.Rows[dgvDespesa.CurrentRow.Index].Cells[“pago”].Value = true

    e como você está atribuindo os valores ao datagridview ?

    dgvDespesa.DataSource = DataTable

    ou preenche os valores coluna a coluna manualmente ?


    quarta-feira, 23 de janeiro de 2013 13:36
  • Eu utilizo a estrutura abaixo :

      public void conectaBanco()

            {

                conexao = new SqlConnection(@"server=.\sqlexpress;Database = xxxx; Integrated Security = xxx");

                conexao.Open();

            }

            public DataTable mostraRegistros()

            {

                captura = new SqlDataAdapter(comando);

                tabDespesa = new DataTable();

                captura.Fill(tabDespesa);

                return (tabDespesa);

            }

    public void consulta()

            {

                comando = new SqlCommand("SELECT  * from despesa", conexao);

               bindingSource1.DataSource = banco.mostraRegistros();

               dgvDespesa.DataSource = bindingSource1;

            }

    public void incluirGasto(int codGasto, decimal valor, DateTime dataVcto, DateTime dataPagto, string pago)

            {

                 comando.CommandText = "INSERT INTO dbo.despesa (codGasto,valor, dataVcto, dataPagto, pago ) VALUES ('" + codGasto + "', '" + valor + "','" + dataVcto + "', '" + dataPagto + "', '" + pago + ")";

                comando.ExecuteNonQuery();

            }

    private void btnGravarDados_Click(object sender, EventArgs e)

            {

                try

                {

                    conectaBanco();

                    consulta();

                    incluirGasto(int.Parse(txtcodGasto.Text), decimal.Parse(txtvalor.text),  DateTime.Parse(txtDataVcto.Text), DateTime.Parse(txtDataPagto.Text), txtPago.Text));

                    MessageBox.Show("Despesa incluída");

                    consulta();

                }

                catch (Exception erro)

                {

                    MessageBox.Show("Erro\n" + erro.Message");

                }

            }

    quarta-feira, 23 de janeiro de 2013 16:32
  • quando você adiciona as colunas no DataGridView, se for coluna CheckBox você tem as opções

    'TrueValue' e 'FalseValue' e o 'DataPropertyName'

    DataPropertyName = "PAGO"; //nome da sua coluna

    TrueValue = "S"; //SIM ou 1 ou como você esta gravando no banco de dados

    FalseValue= "N"; //NÃO OU 0 ou como está gravando no banco de dados

    Dessa forma quando listar as contas no GridView voce vai automáticamente marcar com S ou N os checkBox do usergridview, mas lembre-se de ao criar o DataGridView colocar a coluna pago como DataGridViewCheckBoxColumn para esses atributos aparecerem

    quarta-feira, 23 de janeiro de 2013 16:54
  • Opa

    Só lembrando que eu não adicionei o datagrid via design, ou código, só arrastei o controle datagrid, as colunas vieram carregadas com a estrutura abaixo

      comando = new SqlCommand("SELECT  * from despesa", conexao);

     bindingSource1.DataSource = mostraRegistros();

    dgvDespesa.DataSource = bindingSource1;

    Neste caso, eu utilizo a coluna "pago" no banco como bit? onde altero o tipo da coluna "pago" para CheckBox, se não criei o datagrid via código, e sim, foi atribuído pela estrutura acima?

    Até agora muito obrigado

    Dilson

    quarta-feira, 23 de janeiro de 2013 17:58
  • Certo, vamos aos passos:

    1º - Adicionar 1 coluna DataGridviewCheckBox

     - botão direito no seu DataGridView

     - Edit Columns

     - após selecione a opção AddColumns (ou Add )

     - Coloque o nome que lhe faz relação ex: "ClmPago"

    2º - Após terminar de adiciona a coluna, procure o Atributo DataPropertyName e coloque o nome igual vem do banco no seu select ex: 'Pago'

    3º - setar o TrueValue e o FalseValue para 1 e 0 respectivamente

    Fazendo isso imagino a coluna se 'relaciona' com o datatable e com os valores preenchendo automáticamente os check para 'sim' e 'não'..

    Opa Dilson, estou aqui no Aguardo para saber se deu tudo ok,

    Abraços,

    Afonso

    quarta-feira, 23 de janeiro de 2013 18:05
  • Opa

    Como é que consigo formatar o trueValue=1 e o falseValue=0 da coluna "pago" via código?

    private void dgvGastos_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {

                try
                {
                    dgvGastos.Columns["codConta"].HeaderText = "Conta";
                    dgvGastos.Columns["valor"].HeaderText = "Valor";
                    dgvGastos.Columns["valor"].DefaultCellStyle.Format = "0.00";
                    dgvGastos.Columns["dataVcto"].HeaderText = "Vencimento";
                    dgvGastos.Columns["dataPagto"].HeaderText = "Pagamento";
                    dgvGastos.Columns["Pago"].ValueType.TrueValue = 1;??????

                    
            }

              Grato

    Dilson

                                             
    quarta-feira, 23 de janeiro de 2013 23:54
  • Então,

    se não funcionar dessa maneira, tente usar o proprio nome da coluna ex:

    ClmPago.TrueValue, pois desse modo a coluna é considerada como DataGridViewColumn ao invés de DataGridViewCheckBoxColumn

    outra observação, não use esse isso no método CellFormating, ele é executado muitas vezes e vai deixar seu programa lento, procure usar após o Initialize do form ou em um método executado na criação das colunas...

    ex:

    private void CreateCheckColumn()
    {
       DataGridViewCheckBoxColumn ClmPago;
    
       ClmPago = new DataGridViewCheckBoxColumn()
       {
             Name = "ClmPago",
             TrueValue = 1,
             FalseValue = 0
             HeaderText = "Pago"
       };
    
       DgvDespesas.Columns.Add( ClmPago );
    }

    após isso você pode por o DgvGastos.DataSource= DataTable; // ou qualquer Source que usar

    Abraços,

    Afonso.

    quinta-feira, 24 de janeiro de 2013 13:05
  • Bom dia

    Você está sendo muito legal

    Vou testar hoje à noite e amanhã te dou notícias

    Grato

    Dilson

    quinta-feira, 24 de janeiro de 2013 13:41
  • Bom Dia !

    Opa, que isso, qualquer coisa é só entrar em contato..,

    hoje umas 11hs então eu entro para ver se deu tudo certo

    sou novo aqui kkk, mas to começando a ficar o dia todo,ajudar e aprender !!! rsrs

    abraço !

    Afonso

    quinta-feira, 24 de janeiro de 2013 13:46
  • Opa meu amigo

    Quando eu insiro os dados no banco e efetuo a consulta, vinculando o Datagrid ao DataSource, e ao DataTable, ele já monta as colunas no datagrid, ou seja, eu não insiro as colunas via design, acho que o que está faltando para mim, é como alterar o tipo da coluna “pago”  (via código) para checkBox inserindo o trueValue e o FalseValue

    Esta coluna está criada no banco como “bit”

    Sabes como faço isto?

    Dilson

    sexta-feira, 25 de janeiro de 2013 11:22
  • o jeito mais fácil para fazer isso é, deixar apenas essa coluna inserida no DataGrid via design

    e as demais colunas deixar que o DataSource adiciona normalmente

    adiciona ela via o design com o tipo DataGridViewCheckBoxColumn, coloca o DataPropertyName para o nome correspondente a coluna no select, coloca o TrueValue = 1 e o FalseValue = 0; essas propriedades aparecem quando você da um botão direito no Grid, Edit Columns,

    depois clica no botão Add, põe o nome da Coluna, Selecione o tipo e após Coloca o nome de exibição ( o HeaderText) e da ok, logo após no menu a direita atribua os valores as propriedades que eu disse logo a cima, lembrando que não precisa adicionar todas as colunas, apenas 1

    (esse é o processo via design)

    O processo via código fica:

     adiciona o método ao seu código, renomeando o valor do Grid, e se precisar das colunas:

    private void CreateCheckColumn()
    {
       DataGridViewCheckBoxColumn ClmPago;
    
       ClmPago = new DataGridViewCheckBoxColumn()
       {
             Name = "ClmPago",
             TrueValue = 1,
             FalseValue = 0
             HeaderText = "Pago"
       };
    
       DgvDespesas.Columns.Add( ClmPago );
    }

    e logo após, no método que você chama o DataSource você faz isso

    private void SetValueDataGridView()
    {
         CreateCheckBoxColumn();
         Dgv.DataSource = GetDtSource();
    }

    o processo é mais ou menos assim, antes de você chamar o DataTable, você cria a coluna com o código a cima, só toma cuidado para não 'criar a coluna mais de 1 vez, caso acontecer, no método CreateCheckBoxColumn, adicione um if ( !Dgv.Columsn.Contais( "Pago" ) , antes de adicionar a coluna ao grid... isso deve resolver para você

    Abraços ;)

    sexta-feira, 25 de janeiro de 2013 12:27
  • OK

    Vou testar à noite e te dou notícias, até aqui muito obrigado mesmo

    Dilson

    sexta-feira, 25 de janeiro de 2013 12:41