1
I have the following scenario:
public class Pedido
{
[Key]
public int Id { get; set; }
public virtual ICollection<ProdutosPedido> ProdutosPedidos { get; set; }
public DateTime CreateDate { get; set; }
public DateTime UpdateDate { get; set; }
}
public class Produto
{
[Key]
public int Id { get; set; }
public string Descricao { get; set; }
public string Valor { get; set; }
public DateTime DataCadastro { get; set; }
public virtual ICollection<ProdutosPedido> ProdutosPedidos { get; set; }
}
public class ProdutosPedido
{
[Key]
public int ProdutosPedidoId { get; set; }
public int ProdutoId { get; set; }
public int PedidoId { get; set; }
public int Quantidade { get; set; }
public virtual Produto Produto { get; set; }
public virtual Pedido Pedido { get; set; }
public virtual Status Status { get; set; }
}
I can save the order with the products without any problem, but I want to make a master table to show the order with your products.
Follows code of the Controller
public ActionResult TodosOsPedidos()
{
var pedidos = _db.ProdutosPedidos.Include("Pedido").Include("Produto").Where(x => x.Pedido.Id == 2);
return View(pedidos);
}
View code:
<table class="table table-condensed table-hover table-striped table-responsive">
<thead>
<tr>
<th style="width: 85px">
Pedido Nº
</th>
<th style="text-align: left">
Solicitante
</th>
<th style="width: 120px">
Data do Pedido
</th>
<th style="width: 120px">
Atualizado Em
</th>
<th style="width: 65px"></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.PedidoId)
</td>
<td style="text-align: left">
@Html.DisplayFor(modelItem => item.Pedido.Franqueado.NomeFantasia)
</td>
<td>
@Html.DisplayFor(modelItem => item.Pedido.CreateDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Pedido.UpdateDate)
</td>
<td>
<a href="@Url.Action("Edit", "Produtos", new { @id = item.PedidoId })" title="Editar" class="btn btn-xs btn-primary tool">
<span class="glyphicon glyphicon-edit"></span>
</a>
<a href="javascript:void(0)" rel="@item.PedidoId" title="Excluir" class="btn btn-xs btn-danger tool delete-produto">
<span class="glyphicon glyphicon-trash"></span>
</a>
</td>
</tr>
<tr>
<td style="width: 100%" colspan="5">
<h5>Produtos</h5>
<table class="table table-condensed table-hover table-striped table-responsive">
<thead>
<tr>
<th>Descrição</th>
<th>Quantidade</th>
<th>Valor Unitário</th>
<th>Valor Total</th>
<th>Status</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>@Html.DisplayFor(itemModel => item.Produto.Descricao)</td>
<td>@Html.DisplayFor(itemModel => item.Quantidade)</td>
<td>@Html.DisplayFor(itemModel => item.Produto.Valor)</td>
<td>@Html.DisplayFor(itemModel => item.Produto.Descricao)</td>
<td>@Html.DisplayFor(itemModel => item.Produto.Descricao)</td>
<td></td>
</tr>
</tbody>
</table>
</td>
</tr>
}
</tbody>
</table>
I want to leave as the example below:
Nº Pedido Solicitante Data Criacao Data Atualizacao
1 Fornecedor 01 23/05/2014 27/05/2014
----------------------------------------------------------------------------------------------
Descrição Qntd Valor Uni Valor Total Status #
Produto 01 02 3,50 7,00 Em Proc editar
Nº Pedido Solicitante Data Criacao Data Atualizacao
2 Fornecedor 04 23/05/2014 27/05/2014
----------------------------------------------------------------------------------------------
Descrição Qntd Valor Uni Valor Total Status #
Produto 01 02 3,50 7,00 Em Proc editar
Produto 03 01 3,50 3,50 Em Proc editar
But orders are repeating, all ID two orders are listed with your products, not just 1 ID Request 2 and below related products.
In the part "p => p.ProductsPedidos.Product" the "Productospedidos" turns red and while hovering over the following message: "Cannot resolve symbol 'Productospedidos' Code is unreacheble"
– Hermes Autran
@Hermesautran Then there is something wrong in your relationship in code. If Resharper indicates the property in red, it means that
ProdutosPedidos
does not exist in the ModelPedido
.– Leonel Sanches da Silva
My classes are as above. =/
– Hermes Autran
@Hermesautran Colocou
using System.Data.Entity
in the header of your Controller?– Leonel Sanches da Silva
It worked, the
ProdutosPedidos
is okay, but theProduto
turned red.– Hermes Autran
True, because it is
IEnumerable
. Use onlyInclude(p => p.ProdutosPedidos)
. I’ll fix the answer.– Leonel Sanches da Silva
In the
@foreach (var produtoPedido in Model.ProdutosPedidos)
theProdutosPedidos
the same message appearsCannot resolve simbol 'ProdutosPedidos'
– Hermes Autran
You changed the
@model IEnumerable<Pedido>
as I described in the reply?– Leonel Sanches da Silva
Yes, it’s right here at
View
-->@model IEnumerable<Pedido>
– Hermes Autran
My mistake. Change it
@foreach (var produtoPedido in Model.ProdutosPedidos)
for@foreach (var produtoPedido in item.ProdutosPedidos)
. I’ll change the answer again.– Leonel Sanches da Silva
It worked exactly as I wanted, but the product data is coming blank.
– Hermes Autran
Now it’s up to you. I don’t know how your data is.
– Leonel Sanches da Silva
I added the following
p => p.ProdutosPedidos.Select(x => x.Produto)
and it worked perfectly. It would be cool until you edit to be complete. Thank you very much Morrison!– Hermes Autran