Atribui valor via código a um tableadapter

08/10/2008

0

Olá Pessoal,

primeiramente gostaria de dizer que pesquisei, mas não encontrei algo que me ajudasse, caso haja um tópico com isso me informem por favor e me desculpem a ignorância... rsrs... agora vamos lá..

Tenho uma aplicação windows forms (Ah, sou iniciante em C#). Tenho um projeto DAL que possui um dataset com todas as tabelas do meu banco.

No outro projeto (só terei 2 mesmo) tenho a tela unidade administrativa (escritório). Eu consigo fazer a grid carregar os dados... consigo entrar em modo de inserção... e consigo também COMEÇAR a salvar... porém existe um campo na tabela (COD_STATUS) que quando se inserir uma unid adm ele vai receber o valor 1... se tentar excluir essa unidade administrativa passa para o valor 2.

é isso que não consigo fazer por nada... olha meu código ai...



´using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SGP.DAL;
using SGP.DAL.SGPDataSetTableAdapters;

namespace SGP.Apresentacao
{
public partial class frmUnidAdm : Form
{
public TB_UNID_ADM_UATableAdapter UATableAdapter { get; set; }

public frmUnidAdm()
{
InitializeComponent();
}


private void frmUnidAdm_FormClosed(object sender, FormClosedEventArgs e)
{
cModulo.UnidAdm = null;
}

private void frmUnidAdm_Load(object sender, EventArgs e)
{
this.UATableAdapter = new TB_UNID_ADM_UATableAdapter();
this.Listar();
}

private void ControlaBotoes()
{
this.btnUANovo.Enabled = !this.btnUANovo.Enabled;
this.btnUASalvar.Enabled = !this.btnUASalvar.Enabled;
this.btnUACancelar.Enabled = !this.btnUACancelar.Enabled;
this.btnUAAlterar.Enabled = !this.btnUAAlterar.Enabled;
this.btnUAExcluir.Enabled = !this.btnUAExcluir.Enabled;
this.btnUASair.Enabled = !this.btnUASair.Enabled;
}

private void Listar()
{
this.UATableAdapter.Fill(sGPDataSet.TB_UNID_ADM_UA);
}

private void Inserir()
{
this.tB_UNID_ADM_UABindingSource.AddNew();
}

private bool Salvar()
{
this.txtUADesc.Text.Trim();
if (this.txtUADesc.Text.Equals(´´))
{
MessageBox.Show(´O campo Unidade Administrativa não foi preenchido!´, ´ATENÇÃO´);
return false;
}
else
{
//Preciso atribuir o valor ao campo UAStatus
//this.tB_UNID_ADM_UABindingSource.Insert(7, 1);
//this.UATableAdapter.Insert(´´,´´,´´,´´,´´,´´,1);
this.tB_UNID_ADM_UABindingSource.EndEdit();
this.UATableAdapter.Update(sGPDataSet.TB_UNID_ADM_UA);
MessageBox.Show(´Registro salvo no banco de dados com sucesso!´, ´CONFIRMAÇÃO´);
return true;
}
}

private void Cancelar()
{
this.tB_UNID_ADM_UABindingSource.CancelEdit();
}

private void Excluir()
{
if (MessageBox.Show(´Confirma a exclusão do registro?´, ´EXCLUSÃO´,
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
/*this.tB_UNID_ADM_UABindingSource.RemoveCurrent();
this.Listar();
* Essas 2 linhas acima seriam para excluir um registro, porém temos q apenas mudar
* o status do registro!!!
*/
}
}

private void btnUANovo_Click(object sender, EventArgs e)
{
this.Inserir();
this.ControlaBotoes();
this.pnlUADGV.Enabled = false;
this.pnlUADados.Enabled = true;
this.txtUADesc.Focus();
}

private void btnUASalvar_Click(object sender, EventArgs e)
{
if (this.Salvar())
{
this.Listar();
this.ControlaBotoes();
this.pnlUADGV.Enabled = true;
this.pnlUADados.Enabled = false;
this.dgvUnidAdm.Focus();
}
}

private void btnUACancelar_Click(object sender, EventArgs e)
{
this.Cancelar();
this.ControlaBotoes();
this.pnlUADGV.Enabled = true;
this.pnlUADados.Enabled = false;
this.dgvUnidAdm.Focus();
}

private void btnUAAlterar_Click(object sender, EventArgs e)
{
this.ControlaBotoes();
this.pnlUADGV.Enabled = false;
this.pnlUADados.Enabled = true;
this.txtUADesc.Focus();
}
}



Tentei isso aqui

//this.tB_UNID_ADM_UABindingSource.Insert(7, 1);
//this.UATableAdapter.Insert(´´,´´,´´,´´,´´,´´,1);

mas não deu certo....

Sou ainda meio leigo sobre as diferenças entre DataSet, DataSource, TableAdapter, DataTable....

Alguém poderia me ajudar?!

Obrigado desde já!


Brunobaco

Brunobaco

Responder

Posts

09/10/2008

Codename.v

Você quer excluir um campo da sua tabela ou simplesmente alterar o valor da coluna ´cod_status´ de um registro ja existente para 2?

Que base de dados você está utilizando?


Responder

09/10/2008

Brunobaco

Estou usando SQL Server...

quando eu estiver inserindo o registro, eu quero apenas setar o valor 1 para o campo cod_status....

mas tbém vou precisar mudar o valor para 2 se eu quiser bloquear o registro... ou seja, preciso além de poder setar o valor, poder alterá-lo...

preciso também recebê-lo ...

Vlw


Responder

09/10/2008

Codename.v

O que você tem dentro deste namespace SGP.DAL.SGPDataSetTableAdapters?

Esse objeto TB_UNID_ADM_UATableAdapter é uma classe? Se sim, que métodos você tem dentro dela?


Responder

10/10/2008

Brunobaco

o SGP.DAL é um projeto que criei pra ser minha camada de acesso a dados. Ela tem por enquanto apenas o SGPDataSet.xsd... q é um DataSet como todo meu banco.

Esse TB_UNID_ADM_UATableAdapter foi criado automaticamente... TB_UNID_ADM_UA é o nome da tabela que estou trabalhando.... TB_UNID_ADM_UATableAdapter é o tableadapter que foi automaticamente criado.... e ele tem apenas o Fill e GetData() como métodos.

Ajudei? De qq jeito já agradeço pelo tempo que tem dispendido com meu problema... mas por favor, não desiste de mim... rsrs

Att.


Responder

10/10/2008

Knight_of_wine

Por que você não tenta separar suas tabelas em várias classes diferentes?

Apesar de ter um pouco mais de trabalho braçal, o código é um pouco mais simples.


Responder

10/10/2008

Brunobaco

Por que você não tenta separar suas tabelas em várias classes diferentes? Apesar de ter um pouco mais de trabalho braçal, o código é um pouco mais simples.


Como assim? Fazer um dataset para cada módulo do sistema? Digo módulo pq terão alguns modúlos usando várias tabelas....

É isso?

Bom, mesmo que seja... e mesmo que eu faça.... como eu faço pra que, antes de eu executar o this.tB_UNID_ADM_UABindingSource.EndEdit(); eu consiga atribuir o valor 1 ao campo UA_STATUS???

Alguém me ajude por favor!!!

Att.


Responder

11/10/2008

Codename.v

private void Excluir() 
{ 
        if (MessageBox.Show("Confirma a exclusão do registro?", "EXCLUSÃO", 
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) 
       { 
              this.tB_UNID_ADM_UABindingSource.RemoveCurrent(); 
              this.Listar(); 
        } 
}


O método acima está deletando normalmente o registro? Se sim, você pode iserir o seuinte trigger em sua base de dados do SQL Server:

CREATE TRIGGER TRG_DELETE_EXEMPLO ON TB_UNID_ADM_UA
FOR DELETE
AS
     UPDATE TB_UNID_ADM_UA SET COD_STATUS = 2


Desta forma, sempre que um registro for deletado na tabela TB_UNID_ADM_UA o trigger é disparado e altera o COD_STATUS para 2 resolvendo assim um de seus problemas :wink:

Abraços!


Responder

11/10/2008

Codename.v

Opa! O trigger que eu te passei ta imcompleto, use o seguinte:

CREATE TRIGGER TRG_DELETE_EXEMPLO ON TB_UNID_ADM_UA
FOR DELETE
AS
      UPDATE TB_UNID_ADM_UA SET COD_STATUS = 2 WHERE ID = (SELECT ID FROM DELETED)


Substitua ID pelo nome do campo que guarda a primary key de sua tabela.

Do modo que estava antes ele mudaria todos os registros para 2 quando você excluisse algum :oops:


Responder

11/10/2008

Codename.v

Ainda errado amigo rs! Faz tempo que não uso o SQL Server :lol:

O trigger abaixo vai ser disparado sempre que você tentar excluir um resgistro da sua tabela TB_UNID_ADM_UA. Repare que ele é um trigger INSTEAD OF DELETE (ao invez de deletar), ou seja, ele executa uma outra função no lugar do comando DELETE (no caso um UPDATE).

CREATE TRIGGER TRG_EXEMPLO_1 ON TB_UNID_ADM_UA
INSTEAD OF DELETE
AS
     UPDATE TB_UNID_ADM_UA SET COD_STATUS = 2 WHERE COD_ID = (SELECT COD_ID FROM DELETED)


Sendo COD_ID o campo que guarda a primary key de sua tabela. Desta forma sempre que um registro for deletado o seu status será alterado para 2.

Da mesma forma para a inserção.

CREATE TRIGGER TRG_EXEMPLO_2 ON TB_UNID_ADM_UA
AFTER INSERT
AS
    UPDATE TB_UNID_ADM_UA SET COD_STATUS = 1 WHERE COD_ID = (SELECT COD_ID FROM INSERTED)


O trigger acima é um trigger AFTER INSERT, ou seja, após inserido um novo registro o seu status será alterado para 1.
Obs.: O campo COD_STATUS da tabela TB_UNID_ADM_UA deve permitir valores nulos para que esse trigger funcione.

Se não sabe nada sobre triggers ou como criá-los -> https://www.devmedia.com.br/articles/viewcomp.asp?comp=2704

Agora sim! Essa é uma das formas de resolver seus dois problemas :D

Abraços!


Responder

13/10/2008

Brunobaco

Vlw codename.v!!!

Eu até conheço triggers, mas não havia pensando em fazer isso... não era bem o que tinha pensado no início mas resolve meu problema... pelo menos pro enquanto.... kkkkk

vlw mesmo pelo empenho kra...

T+


Responder

13/10/2008

Codename.v

Rs! É como eu disse, essa é uma das formas de se resolver o seu problema.

Para o caso da inserção você nem precisa do trigger pra falar a verdade. Basta você setar o campo COD_STATUS como Allow Null (permitir valores nulos) e definir o Default Value dele para 1. Desta forma sempre que você inserir um novo resgistro e o COD_STATUS for nulo ele automaticamente é setado para 1... Eu acho... Rs :roll:

Falou! Fico feliz por ter ajudado!


Responder

14/10/2008

Brunobaco

é setado sim... conheço valor default, mas como inicialmente a minha idéia era a de fazer tudo isso via código eu havia descartado isso...

mas vlw mesmo...

T+


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar