Atribui valor via código a um tableadapter
08/10/2008
0
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
Posts
09/10/2008
Codename.v
Que base de dados você está utilizando?
09/10/2008
Brunobaco
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
09/10/2008
Codename.v
Esse objeto TB_UNID_ADM_UATableAdapter é uma classe? Se sim, que métodos você tem dentro dela?
10/10/2008
Brunobaco
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.
10/10/2008
Knight_of_wine
Apesar de ter um pouco mais de trabalho braçal, o código é um pouco mais simples.
10/10/2008
Brunobaco
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.
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!
11/10/2008
Codename.v
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:
11/10/2008
Codename.v
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!
13/10/2008
Brunobaco
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+
13/10/2008
Codename.v
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!
14/10/2008
Brunobaco
mas vlw mesmo...
T+
Clique aqui para fazer login e interagir na Comunidade :)