Array
(
)

Atribui valor via código a um tableadapter

Brunobaco
   - 08 out 2008

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á!

Codename.v
   - 09 out 2008

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?

Brunobaco
   - 09 out 2008

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

Codename.v
   - 09 out 2008

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?

Brunobaco
   - 10 out 2008

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.

Knight_of_wine
   - 10 out 2008

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.

Brunobaco
   - 10 out 2008


Citação:
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.

Codename.v
   - 11 out 2008

#Código

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:

#Código
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!

Codename.v
   - 11 out 2008

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

#Código

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:

Codename.v
   - 11 out 2008

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).

#Código

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.

#Código
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 -> http://www.devmedia.com.br/articles/viewcomp.asp?comp=2704

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

Abraços!

Brunobaco
   - 13 out 2008

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+

Codename.v
   - 13 out 2008

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!

Brunobaco
   - 14 out 2008

é 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+