Usuário com melhor resposta
Form com três dropdown

Pergunta
-
Boa tarde pessoal,
No form que estou montando tem três dropdown, eu preciso ligar esses três componentes ao banco de dados, como é feito esse ligação?
Quando o form tem apenas um dropdown eu faço a ligação dessa forma:
@model IEnumerable<MvcRM.GCOLIGADA> ... <div class="control-group"> <label>Coligada</label> <select id="optColigada" name="optColigada" class="form-control"> @foreach (var item in Model) { <option value="@item.CODCOLIGADA">@item.CODCOLIGADA - @item.NOME</option> } </select> </div>
Att,
Leandro.
Respostas
-
Leandro
Verifica se te ajuda, não sei o relacionamento de suas tabelas. Mas fiz o exemplo para testes:
View:
@model IEnumerable<MvcApplication.Controllers.FCFO>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<select id="optCliForIni" name="optCliForIni" class="form-control">
@foreach (var item in Model)
{
<option value="@item.cod">@item.nome</option>
}
</select>-----------------------------------------------------------------------------------------
Controller:
public class AdiantamentoCFController : Controller
{
public ActionResult Index()
{
List<FCFO> fornecedores = new List<FCFO>();
fornecedores.Add(new FCFO() { cod = 1, nome = "Fornecedor 1" });
fornecedores.Add(new FCFO() { cod = 2, nome = "Fornecedor 2" });
fornecedores.Add(new FCFO() { cod = 3, nome = "Fornecedor 3" });
return View(fornecedores);
}
}----------------------------------------------------------------------------------------
Classe (Tabela)
public class FCFO
{
public int cod { get; set; }
public string nome { get; set; }
}Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
Bom dia Silvaney,
Eu fiz da seguinte forma e deu certo.
No Controller:
public ActionResult AdiantamentoCF()
{
var listaColigada = db.GCOLIGADA.Where(x => x.CODCOLIGADA > 0).ToList();
ViewBag.CliFor = db.FCFO.OrderBy(x => x.CODCFO).Where(x => x.CODCFO != null).ToList();
return View(listaColigada);
}Na View:
@model IEnumerable<MvcRM.GCOLIGADA>
...
<div class="control-group">
<label>Coligada</label>
<select id="optColigada" name="optColigada" class="form-control">
@foreach (var item in Model)
{
<option value="@item.CODCOLIGADA">@item.CODCOLIGADA - @item.NOME</option>
}
</select>
</div>
@*Faixa de seleção dos clientes ou fornecedores (Inicial)*@
<div class="control-group">
<label>Fornecedor inicial</label>
<div class="controls">
<select id="optCliForIni" name="optCliForIni" class="form-control">
@foreach (var clifor in @ViewBag.CliFor)
{
<option value="@clifor.CODCFO">@clifor.CODCFO - @clifor.NOME</option>
}
</select>
</div>
</div> -
Leandro,
Você pode popular os drops usando viewBags , fica bem mais pratico, segue a ideia:
quando vc for retornar a view , você pode criar 3 viewbags com as informações vindas da sua fonte de dados, , chegando na view , você utiliza o HTML Helpers para tipar seus dados Vindo do binder, e cria os dropdownlist com os dados da viewbag !!!!!!!
Diego Almeida Barreto
System Analyst / Software Developer
- Marcado como Resposta Marcos SJ segunda-feira, 18 de abril de 2016 12:45
Todas as Respostas
-
-
Leandro
O primeiro passo é você saber a ordem dos dropdown.
Depois, ao selecionar um, você manda preencher o outro.
E para preencher o último, você utiliza os dois valores selecionados anteriormente para preencher o dropdown.
Eu estou imaginando que você quer fazer dessa maneira, um dropdown vinculado ao outro.
Lembre-se que o valor selecionado deve ser passado para fazer o select no banco de dados, buscando a lista que deseja mostrar.
Espero ter ajudado. Se ajudei, favor marcar no fórum falando que foi útil.
Mauricio Junior - Comunidade www.ecode10.com -
Boa noite,
Leandro, as respostas dos colegas estão corretas. Se você for preencher os três ao mesmo tempo, basta copiar e colar na ordem desejada renomeando o "ID".
Mas se tiver dependências, ou seja, para preencher o "dropdown 2" você depende do que for selecionado no "dropdown 1" e assim por diante, fica um pouco diferente.
Quando preciso fazer isso, eu trabalho com requisições Ajax. Quando seleciona o "dropdown 1" eu pego o id selecionado e faço uma requisição passando esse id, e carrego a "dropdown 2" com o retorno.Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
Bom dia a todos,
Eu fiz da seguinte maneira, mas não deu certo.
<div class="control-group"> <label>Fornecedor inicial</label> <div class="controls"> <select id="optCliForIni" name="optCliForIni" class="form-control"> @foreach(var item in Model) { <option value="@item.FCFO.Select(x => x.CODCFO)">@item.FCFO.Select(x => x.NOME)</option> } </select> </div> </div>
Att,
Leandro.
-
Bom dia,
Leandro, não sei como é a estrutura de seu registros, mas "FCFO" é uma lista?
Se "FCFO", for uma lista você precisa alterar o "foreach" deixando assim:@foreach(var item in Model.FCFO)
{
<option value="@item.CODCFO)">@item.NOME)</option>
}
Espero ter ajudado.
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
-
-
-
Deu certo a solução proposta ?
@foreach(var item in Model.FCFO)
{
<option value="@item.CODCFO)">@item.NOME)</option>
}
ou@foreach(var item in Model)
{
<option value="@item.CODCFO)">@item.NOME)</option>
}Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
-
-
Leandro,
Estou começando a entender... rsrs
FCFO é um lista que está dentro da classe GCOLIGADA ?
Se for e houver necessidade que sua classe GCOLIGADA seja uma lista, você deve entender que você está percorrendo um lista "@foreach(var item in Model)" que dentro de cada objeto desta lista possui outra lista. Isso irá resolver.
@foreach (var item in Model)
{
foreach (var item2 in item.FCFO)
{
<option value="@item2.CODCFO)">@item2.NOME)</option>
}
}
Tem necessidade que sua calsse "GCOLIGADA " seje uma lista?, Se não tiver você pode resolver tirando o "IEnumerable<" deixando so a classe e alterando o for para "@foreach(var item in Model.FCFO.ToList())"
Troque por:
@model MvcRM.GCOLIGADA
@foreach (var item in Model.FCFO.ToList())
{
<option value="@item.CODCFO)">@item.NOME)</option>
}
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
Boa tarde Silvaney,
Eu fiz das duas formas e não deu certo.
Segue um trecho do arquivo ModeloRM.Context.cs
namespace MvcRM{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class RMEntities : DbContext
{
public RMEntities()
: base("name=RMEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<FCFO> FCFO { get; set; }
public DbSet<GCOLIGADA> GCOLIGADA { get; set; }
public DbSet<XCOMPRADOR> XCOMPRADOR { get; set; }
public DbSet<XEMPREENDIMENTO> XEMPREENDIMENTO { get; set; }
public DbSet<XITEMVENDA> XITEMVENDA { get; set; }Nesse arquivo ficam todas as tabelas do banco.
-
Leandro,
Entendi sobre as tabelas, mas aqui não mostra os relacionamentos.
Se sua tabela "FCFO " não tem relacionamento com "GCOLIGADA " você precisa alterar o "IEnumerable para:@model IEnumerable<MvcRM.FCFO >
Ou seja, na sua "Action" na "Controller" você precisa retornar uma lista de "FCFO ".
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
Boa tarde Silvaney,
Eu fiz essa alteração que você me passou.
Acontece que o dropdown "Coligada" veio com vários zeros e essa tabela possui apenas 6 registros.
O dropdown "Fornecedores" funcionou corretamente.
- Editado LeandroMarcelino quinta-feira, 14 de abril de 2016 20:15
-
Leandro
Verifica se te ajuda, não sei o relacionamento de suas tabelas. Mas fiz o exemplo para testes:
View:
@model IEnumerable<MvcApplication.Controllers.FCFO>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<select id="optCliForIni" name="optCliForIni" class="form-control">
@foreach (var item in Model)
{
<option value="@item.cod">@item.nome</option>
}
</select>-----------------------------------------------------------------------------------------
Controller:
public class AdiantamentoCFController : Controller
{
public ActionResult Index()
{
List<FCFO> fornecedores = new List<FCFO>();
fornecedores.Add(new FCFO() { cod = 1, nome = "Fornecedor 1" });
fornecedores.Add(new FCFO() { cod = 2, nome = "Fornecedor 2" });
fornecedores.Add(new FCFO() { cod = 3, nome = "Fornecedor 3" });
return View(fornecedores);
}
}----------------------------------------------------------------------------------------
Classe (Tabela)
public class FCFO
{
public int cod { get; set; }
public string nome { get; set; }
}Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
Bom dia Silvaney,
Eu fiz da seguinte forma e deu certo.
No Controller:
public ActionResult AdiantamentoCF()
{
var listaColigada = db.GCOLIGADA.Where(x => x.CODCOLIGADA > 0).ToList();
ViewBag.CliFor = db.FCFO.OrderBy(x => x.CODCFO).Where(x => x.CODCFO != null).ToList();
return View(listaColigada);
}Na View:
@model IEnumerable<MvcRM.GCOLIGADA>
...
<div class="control-group">
<label>Coligada</label>
<select id="optColigada" name="optColigada" class="form-control">
@foreach (var item in Model)
{
<option value="@item.CODCOLIGADA">@item.CODCOLIGADA - @item.NOME</option>
}
</select>
</div>
@*Faixa de seleção dos clientes ou fornecedores (Inicial)*@
<div class="control-group">
<label>Fornecedor inicial</label>
<div class="controls">
<select id="optCliForIni" name="optCliForIni" class="form-control">
@foreach (var clifor in @ViewBag.CliFor)
{
<option value="@clifor.CODCFO">@clifor.CODCFO - @clifor.NOME</option>
}
</select>
</div>
</div> -
Bom dia,
Que bom que deu certo Leandro, parabéns.
Desculpe não conseguir ajudar mais, pois sem tem o código torna difícil o entendimento e consequentemente a ajuda.
Peço por gentileza, que se alguma das respostas foi útil, que marque por favor.
Sucesso
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
- Sugerido como Resposta Fepus sexta-feira, 15 de abril de 2016 12:40
-
Leandro,
Você pode popular os drops usando viewBags , fica bem mais pratico, segue a ideia:
quando vc for retornar a view , você pode criar 3 viewbags com as informações vindas da sua fonte de dados, , chegando na view , você utiliza o HTML Helpers para tipar seus dados Vindo do binder, e cria os dropdownlist com os dados da viewbag !!!!!!!
Diego Almeida Barreto
System Analyst / Software Developer
- Marcado como Resposta Marcos SJ segunda-feira, 18 de abril de 2016 12:45