2017-10-19 35 views
0

Je souhaite autoriser une liste déroulante à afficher les valeurs précédemment sélectionnées mais qui sont maintenant supprimées de la liste déroulante source. Au lieu d'afficher vide. La liste déroulante est dans une colonne de grille.DropDownList affiche la valeur vide si la valeur sélectionnée n'est pas dans la source

Grille:

... 
columns.ForeignKey(p => p.CurrentCategory, @Model.LookupCategory, "CategoryName", "CategoryName").Width(160); 
... 

éditeur de modèle

@using System.Collections 

@(
Html.Kendo().DropDownListFor(m => m)  
     .BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"]) 
     .ValuePrimitive(true)   
     .AutoWidth(true) 
) 

Donc, pour expliquer plus en détail: La colonne CurrentCategory est une colonne de texte (et non une colonne id) et l'utilisateur peut sélectionnez à partir d'une liste d'éléments trouvés dans la LookupCategory. Toutefois, si un élément est supprimé de la classe Lookup, la valeur doit toujours être affichée dans les instances où l'utilisateur a déjà sélectionné cette valeur pour CurrentCategory.

Actuellement, si une ligne contient une valeur CurrentCategory qui ne figure pas dans la liste LookupCategory, elle est vide.

Peut-être que je dois utiliser un combobox à la place?

Répondre

1

Vous pourriez ajouter à votre modèle de vue une autre AllCategory de propriété contenant l'union de LookupCategory et les éléments supprimés. Cette propriété sera utilisée par la grille pour lier le choix du menu et la propriété LookupCategory sera utilisé comme source de menu déroulant.

Voir ci-dessous comment distinguer les deux en utilisant le modèle de colonne de clé étrangère.

columns.ForeignKey(p => p.CurrentCategory, Model.AllCategory, "CategoryName", "CategoryName") 
     .EditorViewData(new {lookupCategory = Model.LookupCategory}) 
.Width(160); 


@using System.Collections 

@(
Html.Kendo().DropDownListFor(m => m)  
     .BindTo((SelectList) ViewData["lookupCategory"])   
     .ValuePrimitive(true)   
     .AutoWidth(true) 
) 
+0

Merci, cela fonctionne. Est-il impossible d'éviter d'utiliser ViewData et de remplir directement à partir du modèle? – Reafidy

+1

Je ne pense pas –