Inquiridor
C# - RADIOBUTTON x BANCO DE DADOS SQL 2005

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
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
-
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.....????
-
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 ?
-
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");
}
}
-
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
-
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
-
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
-
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
-
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.
-
-
-
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
-
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 ;)
-