Duvidas em uma dbcheckbox
Tenho um formulario de pedidos onde listo eles em uma dbgrid e necessito check-los caso os mesmos forem recebidos, li um artigo na devmedia onde o autor explica como fazer para colocar este dbchebox o que funcionou perfeitamente comigo, porem ao selecionar o campo status ele automaticamente coloca a caixa de seleção a esquerda do campo na dbgrid e ao clickar novamente ele a marca, ao selecionar o campo de baixo ele centraliza a caixa de seleção anterior e coloca o campo do novo pedido a esqueda, mas ao sair do aplicativo os ultimos dados que estao a esquerda nao sao alterado no banco de dados para true é como se eles nao tivessem sidos checkados....
Nao sei çporque isto esta acontecendo para fazer funcionar tenho que selecionar os pedidos que recebi e selecionar um a mais para ele alterar o ultimo.
Nao sei çporque isto esta acontecendo para fazer funcionar tenho que selecionar os pedidos que recebi e selecionar um a mais para ele alterar o ultimo.
Daniel
Curtidas 0
Respostas
Marcos Rocha
24/01/2012
Amigo tenho passado por problemas semelhantes ultimamente. Você está dando Post no seu DataSet após terminar a edição dos dados? Ocorreu comigo que precisei dar um Post a cada item checado e, após isto, reabrir a edição do meu ClientDataSet com o método Edit.
GOSTEI 0
Daniel
24/01/2012
Amigo tenho passado por problemas semelhantes ultimamente. Você está dando Post no seu DataSet após terminar a edição dos dados? Ocorreu comigo que precisei dar um Post a cada item checado e, após isto, reabrir a edição do meu ClientDataSet com o método Edit.
Mas onde e como devo colocar os codigos...
Bom, deixei desta forma no evento dbcheckboxclick
if dbcheckbox1.checked then begin dbcheckbox1.caption := dbcheckbox1.valuechecked; adoquery1.edit; adoquery1.post; end else begin dbcheckbox1.caption := dbcheckbox1.valueunchecked; adoquery1.edit; adoquery1.post; end; end;
mas ao clicar ele nao marca a checkbox e ao dar varios cliques ele mostra o seguinte erro:
ADOQuery1: DataSet not in edit or insert mode
GOSTEI 0
Marcos Rocha
24/01/2012
Daniel você deve configurar o DBCheckBox ligando o DataSource e a propriedade DataField corretamente. Você não faz com que o CheckBox receba o valor. Isto é feito automaticamente quando você troca de registro.
Para que os dados do seu DataSet fiquem postados, você pode implementar o evento OnDataChange do DataSource da seguinte forma:
Lembrando que o OnDataChange é disparado, inclusive, quando você troca de coluna ou registro. Então sempre que você receber o erro DataSet is not in Editing mode é porque tem que dar um ClientDataSet1.Edit.
Caso tenha resolvido seu problema, por favor, finalize este chamado técnico.
Para que os dados do seu DataSet fiquem postados, você pode implementar o evento OnDataChange do DataSource da seguinte forma:
procedure TForm2.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if ClientDataSet1.Modified then
ClientDataSet1.Post;
ClientDataSet1.Edit;
end;Lembrando que o OnDataChange é disparado, inclusive, quando você troca de coluna ou registro. Então sempre que você receber o erro DataSet is not in Editing mode é porque tem que dar um ClientDataSet1.Edit.
Caso tenha resolvido seu problema, por favor, finalize este chamado técnico.
GOSTEI 0
Daniel
24/01/2012
Daniel você deve configurar o DBCheckBox ligando o DataSource e a propriedade DataField corretamente. Você não faz com que o CheckBox receba o valor. Isto é feito automaticamente quando você troca de registro.
Para que os dados do seu DataSet fiquem postados, você pode implementar o evento OnDataChange do DataSource da seguinte forma:
Lembrando que o OnDataChange é disparado, inclusive, quando você troca de coluna ou registro. Então sempre que você receber o erro DataSet is not in Editing mode é porque tem que dar um ClientDataSet1.Edit.
Caso tenha resolvido seu problema, por favor, finalize este chamado técnico.
Para que os dados do seu DataSet fiquem postados, você pode implementar o evento OnDataChange do DataSource da seguinte forma:
procedure TForm2.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if ClientDataSet1.Modified then
ClientDataSet1.Post;
ClientDataSet1.Edit;
end;Lembrando que o OnDataChange é disparado, inclusive, quando você troca de coluna ou registro. Então sempre que você receber o erro DataSet is not in Editing mode é porque tem que dar um ClientDataSet1.Edit.
Caso tenha resolvido seu problema, por favor, finalize este chamado técnico.
Marcos ao executar ele aparece o seguinte erro:
Stack overflow
Checko o primeiro e ao tentar o segundo pedido ele mostra o erro...
GOSTEI 0