Array
(
)

Radio Button e Checkbox no Banco de Dados

Sigrids Lima
   - 21 mai 2012

Tenho uma aplicação em camadas como regra de negócio, tenho umas checkbox e uns radios buttons como posso adicionar os valores no bd.

Joel Rodrigues
   - 21 mai 2012

Você poderia detalhar melhor a situação? Que tipo de projeto você usa, como está trazendo os dados do BD, etc...
Assim facilitará para que alguém te ajude.

0
|
0

Sigrids Lima
   - 25 mai 2012

E o seguinte tem uma tela de cadastro de nomes, seque o link da aplicação:

http://www.igrejadarestauracao.net/tela.jpg

Nao estou conseguindo gravar os valores dos radio button e checkBox dentro de uma groupbox.
Ja os valores das textbox consigo gravar normalmente.
Segue o codigo para gravar:

public void InserirContato()
{
try
{
dal.ComandoSQl(INSERT INTO TBNOME(nome,endereco,sexo,estuda,obs) VALUES( + Nome + , + Endereco + , + Sexo + , + Estuda + , + Obs + ));
}
catch (Exception ex)
{
throw ex;
}

}

E o codigo do evento do botao gravar

private void btnSalvar_Click(object sender, EventArgs e)
{
if (txtNome.Text != )
{
RegraNegocio cln = new RegraNegocio();
cln.Nome = this.txtNome.Text;
cln.Endereco = this.txtEndereço.Text;
cln.Sexo = this.rdMasculino.Text;
cln.Sexo = this.rdFeminino.Text;
cln.Estuda = this.ckbEstuda.Text;
cln.Obs = this.rtbObs.Text;
cln.InserirContato();
negocio.PreencherDataGrid(dgvNome);
btnSalvar.Enabled = false;
btnAtualizar.Enabled = true;
btnExcluir.Enabled = true;

{
txtNome.Focus();
btnSalvar.Enabled = true;
}

LimparCampo();

MessageBox.Show(Nome cadastrado com sucesso, Sucesso,
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
txtNome.Focus();
btnNovo.Enabled = true;
btnSalvar.Enabled = true;
btnAtualizar.Enabled = true;
btnExcluir.Enabled = true;
btnPrimeiro.Enabled = true;
btnProximo.Enabled = true;
btnUltimo.Enabled = true;
btnAnterior.Enabled = true;

MessageBox.Show(Adicione um nome de Usuário, Atenção, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

So conseguigo salvar os dados no banco quando retiro essas linhas:

cln.Sexo = this.rdMasculino.Text;
cln.Sexo = this.rdFeminino.Text;
cln.Estuda = this.ckbEstuda.Text;

Mesmo assim os valores do radio button e checkbox nao grava.

0
|
0

Joel Rodrigues
   - 25 mai 2012

Opa, a questão parece simples, você está passando as informações incorretas para as propriedades Sexo e Estuda. Quais são os tipos dessas duas propriedades?
Se Estuda for bool, você deve usar cln.Estuda = this.ckbEstuda.Checked;

Enfim, qual o tipo das duas propriedades problemáticas?

0
|
0

Sigrids Lima
   - 25 mai 2012

Não entendir qual o tipo de propriedade.

Sexo esta como nchar(1)
Estuda (bit)

se nao for como posso descobrir
ate

0
|
0

Joel Rodrigues
   - 25 mai 2012

Certo, então no banco a coluna ESTUDA é do tipo BIT e a SEXO é do tipo NCHAR(1). No código (C#), quais são os tipos? PROVAVELMENTE deve ser Bool e String, respectivamente. Sendo assim, você pode usar o código que falei na postagem anterior para a propriedade Estuda.
Já para a propriedade Sexo, que valore você vai armazenar? F/M, 0/1, H/M...?

Teste o seguinte:
#Código

cl.Estuda = ckbEstuda.Checked;
cl.Sexo = (rbMasculino.Checked?´´M´´:´´F´´);


Dessa forma você insere M ou F no sexo e True ou False no Estuda. Deu pra sacar a ideia?

Qualquer dúvida, é só falar.

0
|
0

Sigrids Lima
   - 26 mai 2012

Conseguir gravar o valor do checkbox blz porem coloquei como bool e coloquei a linha: cln.Estuda = this.ckbEstuda.Checked;
Agora ja o radio button nao conseguir, o que pode ser melhor como string ou bool e como seria o codigo?

exemplo:
cln.Sexo = this.rdMasculino.Checked;
cln.Sexo = this.rdFeminino.Checked;

0
|
0

Joel Rodrigues
   - 27 mai 2012

Deu algum erro pro Sexo?
Ao meu ver, como você tem um campo texto, pode gravar M ou F, foi o que fiz no exemplo acima. Qual foi o problema?

0
|
0

Sigrids Lima
   - 28 mai 2012

Conseguir resolver da seguinte maneira:

cln.Sexo = (rdMasculino.Checked?F:M);
cln.Sexo = (rdFeminino.Checked ? F : M);

coloquei como string e

cln.Estuda = this.ckbEstuda.Checked;

como bool. Ate ai blz, conseguir gravar os valore no db, so que coloquei um datagridview com um evento click, quando clico na grid, os valores das textbox aparecem normais, somente o do radio button e da checkbox nao vem selecionado e dando um erro Cannot implicitly convert type string to bool na linha ckbEstuda.Checked = dgvNome.CurrentRow.Cells[5].Value.ToString();
Obs. os radiobutton e checkbox estao dentro de group box.

private void dgvNome_Click(object sender, EventArgs e)
{
habilitarControles();
btnAtualizar.Enabled = true;
btnExcluir.Enabled = true;
btnSalvar.Enabled = false;
txtCodigo.Text = dgvNome.CurrentRow.Cells[0].Value.ToString();
txtNome.Text = dgvNome.CurrentRow.Cells[1].Value.ToString();
txtEndereço.Text = dgvNome.CurrentRow.Cells[2].Value.ToString();
rdMasculino.Text = dgvNome.CurrentRow.Cells[3].Value.ToString();
rdFeminino.Text = dgvNome.CurrentRow.Cells[4].Value.ToString();
ckbEstuda.Checked = dgvNome.CurrentRow.Cells[5].Value.ToString();
rtbObs.Text = dgvNome.CurrentRow.Cells[6].Value.ToString();
}

Aguardo amigo

0
|
0

Joel Rodrigues
   - 30 mai 2012

Antes, expliquemo o erro: quando você usa ´´ckbEstuda.Checked = dgvNome.CurrentRow.Cells[5].Value.ToString();´´, está tentando atribuir um string a uma propriedade bool, ou seja, visível incompatibilidade de dados.

Como os campos Sexo e Estuda estão aparecendo no GridView? True/False ou 0/1 e M/F?

Para o campo Estuda, você deve precisar de algo assim:
ckbEstuda.Checked = Convert.ToBoolean(dgvNome.CurrentRow.Cells[5].Value);

Outra coisa, como é que você está tratando o sexo? Tem dois campos? Reveja isso aí.

0
|
0

Sigrids Lima
   - 30 mai 2012

Conseguir resolver a parte da checbox como vc me falou, ja o radio button nao
Criei no banco a opção sexo como como nchar(1) e a propriedade como string e com valores M e F, criei dois radio buttons com os respectivos sexo M e F.

Olha o codigo para salvar
cln.Sexo = (rdMasculino.Checked?F:M);
cln.Sexo = (rdFeminino.Checked ? F : M);

So nao estou conseguindo voltar os valores quando clico na grid.
Tentei colocar assim mais nao deu certo

rdMasculino.Checked = dgvNome.Rows[0].Selected = true;
rdFeminino.Checked = dgvNome.Rows[0].Selected = true;

0
|
0

Joel Rodrigues
   - 31 mai 2012

Tente o seguinte:

rdMasculino.Checked = dgvNome.CurrentRow.Cells[COLUNA_SEXO].Value.ToString() == ´´M´´;
rdFeminino.Checked = dgvNome.CurrentRow.Cells[COLUNA_SEXO].Value.ToString() == ´´F´´;

0
|
0

Sigrids Lima
   - 31 mai 2012

Ok du certo, muito obrigado
ate

0
|
0

Joel Rodrigues
   - 31 mai 2012

Que bom que funcionou.
Até a próxima.

0
|
0