Um DataSet Tipado é um Layer (camada) entre o Banco de dados e as páginas em ASP.NET e C# ou VB. Derivado de uma Classe DataSet, um DataSet Tipado usa a informação contida em um arquivo (.xsd). Esse arquivo é um arquivo de esquema XML que permite gerar uma nova classe.
Toda a informação do esquema representado por tabelas , colunas, linhas , etc.. é gerada e compilada neste nova classe DataSet. Como esta nova classe é derivada da classe DataSet ela assuem toda a funcionalidade da classe DataSet.

Figura 1

Nossa aplicação tem como página inicial o Default.aspx. Na aplicação principal essa página é chamada a partir de um MENU suspenso. Dessa forma todos os TextBox(s) e o GridView já aparecem preenchidos. Conforme figura 2.


Figura 2

Neste exemplo demos o nome de DasetTipadox para a aplicação. Nesta segunda parte vamos nos voltar para o Botton “Iniciar”. Ao clicar nesse Botton iniciamos todo um processo de cálculo dos serviços cadastrados em duas tabelas onde uma contém os dados do serviço. As tabelas estão elencadas abaixo:
1) Tabela ServicoAux – Código, Especificação, Unidade e Preço do Serviço;
2) Tabela CompAux – Código (o mesmo da tabela ServicoAux), CodInsumo, Unidade do Insumo, Quantidade, Preco Unitário do Insumo e Total = Preço Unitário x Quantidade
3) DataTable1 – Composição das duas tabelas anteriores em que adicionamos o campo Especificação à tabela CompAux. A intenção é usa-la, depois, para impressão da “Composição de Preço do Serviço”;
4) Tabela Material – CodInsum, Especi, Und, PunitInsum;
5) Tabela Maodeobra – CodInsum, Pessoal, Und, PunitInsum;
6) Tabela Equipamento – CodInsum, Equipamento, Und, PunitInsum
7) Tabela DadosGerais – Contem valores constantes que mudam quando mudam os dados usados para calcular seus valores que dependem de Decretos Leis etc..
Na prática os campos das três últimas tabelas diferem um pouco com exceção do campo codigo que tem o mesmo nome para as três.
No arquivo zipado disponibilizado temos todas as adições de itens incluindo: Default.aspx, AtualizaAux.xsd, ModelTecsanear2.edmx, etc.. O importante é verificar que adicionamos um EF.

No evento “Page_Load” fazemos a verificação se já “carregamos” essa página para não repetir a conexão com o banco. A sguir os métodos inseridos no (.cs).
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Conectar();
}

}

public void Conectar()
{
try
{
string cmdselect = ("SELECT CompAux.*, ServicoAux.Servico FROM ServicoAux INNER
JOIN CompAux ON ServicoAux.ServicoID = CompAux.ServicoID");

SqlConnection cn = new SqlConnection("Data Source=xxxxxx.xxxxxx.com;Initial
Catalog=tecsanear2;Persist Security Info=True;User
ID=tecsanear2;Password=xxxxxxxx;MultipleActiveResultSets=True");
SqlCommand cmd = new SqlCommand(cmdselect, cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
AtualizaAux tds = new AtualizaAux();// Aqui tds é a instância de nossa classe criada quando
criamos o DataSet.xsd
da.Fill(tds, tds.DataTable1.TableName);// Ação mais importante. Preencher o DataSet, mais
precisamente toadas as tabelas inseridas
Em seguida preenchemos os TextBox(s) com os dados do primeiro registro da tabela “DataTabe1” inserida no DataSet.
this.txtServicoID.Text = Convert.ToString(tds.DataTable1[0].ServicoID);
this.txtInsumoID.Text = Convert.ToString(tds.DataTable1[0].InsumoID);
this.txtUnd.Text = (tds.DataTable1[0].Und);
this.txtQtdade.Text = Convert.ToString(tds.DataTable1[0].Qtdade);
this.txtPUnit.Text = Convert.ToString(tds.DataTable1[0].PunitInsum);
this.txtSubTot.Text = Convert.ToString(tds.DataTable1[0].Total);
this.txtEspeci.Text = (tds.DataTable1[0].Servico);

Como já inserimos um SQLDataSource na página e o ligamos ao GridView1...

GridView1.DataBind();
}
catch (ApplicationException ex)
{
lblResult.Text = ex.Message;// Label inserida na página para ser preenchida com a exceção
levantada, se houver.
}
}
O resultado é o preenchimento dos TextBox(s) e do GridView1.
Ao clicar no botton “Iniciar” iniciamos todo o processo conforme a seguir:
protected void btnIniciar_Click(object sender, EventArgs e)
{

int j = 0;
int i = 0;
Decimal Inpunit = 0.00M;
long Inpuni = 0;
long ID = 0;
string cmdselect = ("SELECT CompAux.*, ServicoAux.Servico FROM ServicoAux INNER
JOIN CompAux ON ServicoAux.ServicoID = CompAux.ServicoID");
SqlConnection cn = new SqlConnection("Data
Source=xxxxxx.whservidor.com;Initial Catalog=tecsanear2;Persist Security
Info=True;User
ID=xxxxxxx;Password=xxxxxxxxxxx;MultipleActiveResultSets=True");
SqlCommand cmd = new SqlCommand(cmdselect, cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
AtualizaAux tds = new AtualizaAux();
da.Fill(tds, tds.DataTable1.TableName);

do
{
j = tds.DataTable1[i].Flag;
this.txtServicoID.Text = Convert.ToString(tds.DataTable1[i].ServicoID);
ID = tds.DataTable1[i].ServicoID;
this.txtInsumoID.Text = Convert.ToString(tds.DataTable1[i].InsumoID);
Inpuni = tds.DataTable1[i].InsumoID;
this.txtUnd.Text = (tds.DataTable1[i].Und);
this.txtQtdade.Text = Convert.ToString(tds.DataTable1[i].Qtdade);
this.txtPUnit.Text = Convert.ToString(tds.DataTable1[i].PunitInsum);
this.txtSubTot.Text = Convert.ToString(tds.DataTable1[i].Total);
this.txtEspeci.Text = (tds.DataTable1[i].Servico);
//Método de busca do preço unitário do insumo
Inpunit = buscaPrinsum(j);
// Método para trocar o preço unitario do Insumo em todos os registros da
Tabela CompAux
trocaPunitNacompaux(Inpunit, ID, Inpuni);//troca o valor do insumo e calcula
o valor total = Punit x Qtdade
i++;
}
while (i < tds.DataTable1.Count());
// Após trocar o preço unitário dos insumos em todos os registros fazemos o
cálculo do valor do serviço
calculaValordoServico();
}
// Buscando o preço unitário do insumo
private decimal buscaPrinsum(int i)
{
using (tecsanear2Entities context = new tecsanear2Entities())// Usando o EF
{
Decimal Inpunite = 0.00M;
Equipamento objEquipamento;
Maodeobra objMaodeobra;
Material objMaterial;
long matID = Convert.ToInt64(txtInsumoID.Text);
#region busca o registro
if (i == 1) // i é o flag que indica qual tabela pesquisar
{
List lisMaterial = (from jm in context.Material select
jm).Where(item => item.MaterialID == matID).ToList();
if (lisMaterial.Count == 1)
{
objMaterial = lisMaterial[0];
Inpunite = objMaterial.Punit;

}
}
else if (i == 2)
{
List lisMaodeobra = (from jm in context.Maodeobra select
jm).Where(item => item.PessoalID == matID).ToList();
if (lisMaodeobra.Count == 1)
{
objMaodeobra = lisMaodeobra[0];
Inpunite = objMaodeobra.Punit;
}
}
else if (i == 3)
{
List lisEquipamento = (from jm in context.Equipamento
select jm).Where(item => item.EquipamentoID == matID).ToList();
if (lisEquipamento.Count == 1)
{
objEquipamento = lisEquipamento[0];
Inpunite = objEquipamento.Punit;
}
}

return Inpunite;
#endregion busca o registro
}
}
// Trocando todos os preços unitários na tabela CompAux
private void trocaPunitNacompaux(decimal Inpunit, long ID, long Inpuni)
{
using (tecsanear2Entities context = new tecsanear2Entities())
{
int i = 0;
CompAux objCompAux;
#region busca o registro
List LisInsumo = (from jm in context.CompAux select jm).Where(item
=> item.ServicoID == ID).ToList();
do
{
if (LisInsumo[i].InsumoID == Inpuni)
{
objCompAux = LisInsumo[i];
objCompAux.PunitInsum = Inpunit;
objCompAux.Total = (Inpunit * objCompAux.Qtdade);

}
i++;
}
while (i < LisInsumo.Count);
#endregion busca o registro
context.SaveChanges();
}
}
// Percorremos a tabela que tem os dados do serviço: Codigo, Especi, Und, Preço do
serviço e chamamos um método para cálcular o preço de cada serviço
private void calculaValordoServico()
{
int i = 0;
long ID = 0;
string cmdselect = ("SELECT * from ServicoAux");
SqlConnection cn = new SqlConnection("Data
Source=xxxxxxx.whservidor.com;Initial Catalog=tecsanear2;Persist Security
Info=True;User
ID=xxxxxxxxxxx;Password=xxxxxxxxxxx;MultipleActiveResultSets=True");
SqlCommand cmd = new SqlCommand(cmdselect, cn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
AtualizaAux tds = new AtualizaAux();
da.Fill(tds, tds.ServicoAux.TableName);
do
{
ID = tds.ServicoAux[i].ServicoID;
calculaValores(ID);
i++;
}
while (i < tds.ServicoAux.Count);
}
//Invocamos o método para calcular o preço de cada serviço representado por vários
registros cadastrados na tabela CompAux
private void calculaValores(long ID)
{
using (tecsanear2Entities context = new tecsanear2Entities())
{
DateTime minhaData = DateTime.Now;
decimal valLS = 0.00M;
decimal valMO = 0.00M;
decimal valMAT = 0.00M;
decimal valEQUI = 0.00M;
int i = 0;
ServicoAux objServicoAux;
Material objMaterial;
#region busca o registro
List LisRegistros = (from jm in context.CompAux select
jm).Where(item => item.ServicoID == ID).ToList();
if (LisRegistros.Count > 0)
{
List LisDados = (from js in context.DadosGerais select
js).ToList();
List LisRegistro = (from jd in context.ServicoAux select
jd).Where(item => item.ServicoID == ID).ToList();
List LisMaterial = (from jf in context.Material select
jf).Where(item => item.MaterialID == ID).ToList();
#endregion busca o registro
#region altera registro
valLS = LisDados[0].LeisSociais;// A tabela dados Gerais só tem um
registro
valLS = (valLS / 100) + 1;
do
{
if (LisRegistros[i].Flag == 2)
{
valMO += LisRegistros[i].Total;
}
else if (LisRegistros[i].Flag == 1)
{
valMAT += LisRegistros[i].Total;
}
else if (LisRegistros[i].Flag == 3)
{
valEQUI += LisRegistros[i].Total;
}

i++;
}
while (i < LisRegistros.Count);
valMO = valMO * valLS;
objServicoAux = LisRegistro[0];
objServicoAux.Punit = (valMO + valMAT + valEQUI);
objServicoAux.Data = minhaData;
context.SaveChanges();
objMaterial = LisMaterial[0];
objMaterial.Punit = (valMO + valMAT + valEQUI);
// Como o serviço é auxiliar – irá compor outros serviços – ele é,
também, cadastrado na tabela de Material quando da sua criação na Tabela
ServicoAux
context.SaveChanges();
#endregion altera registro

}
}
}


Aprofunde seus conhecimentos sobre este tema na comunidade ASP.NET

Aprofunde seus conhecimentos sobre este tema na comunidade ADO.NET

Arquivo zipado

Exibições: 717

Comentar

Você precisa ser um membro de DevBrasil para adicionar comentários!

Entrar em DevBrasil

Comentário de João Castro em 24 agosto 2013 às 8:44

Impressionante. Se fosse hoje não seria capaz de fazer tal rotina. Dois anos sem praticar e já esqueci tudo.

© 2017   Criado por Ramon Durães.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço