Hello,
it's been some hours that i have been trying to display a dropdownlist in my grid instead of the numeric textfield that appears for a specific column ( which is a foreign key).
When i click on the edit button, this column displays a textfield with the possibility to select the ID only. I want the name instead.
This is my code:
PS: the rows displayed in my grid are NoteForm objects and the foreign key i'm talking about is languageId ( the table is language)
[Table(
"note"
)]
public
class
NoteForm
{
[Required]
[StringLength(100, ErrorMessage =
"The {0} must be at least {2} characters long."
, MinimumLength = 6)]
[Display(Name =
"Title"
)]
public
string
Title {
get
;
set
; }
[Required]
[Display(Name =
"Text"
)]
public
string
Text {
get
;
set
; }
[Required]
[Display(Name =
"Language"
)]
public
int
languageId {
get
;
set
; }
[ForeignKey(
"languageId"
)]
[UIHint(
"LangDropDown"
)]<!--- I TRIED TO ADD THIS ATTRIBUTE -->
public
virtual
Language language {
get
;
set
; }
[Key]
public
int
id {
get
;
set
; }
public
int
userId {
get
;
set
; }
}
[Table(
"Language"
)]
public
class
Language
{
public
string
lang {
get
;
set
; }
[Key]
public
int
id {
get
;
set
; }
}
My View:
@
using
Kendo.Mvc.UI
@model DevelopmentNotesProject.Models.NoteForm
@{
ViewBag.Title =
"Index"
;
}
<script type=
"text/javascript"
>
function formatter(value) {
return
value.substring(0, 50);
}
</script>
<section id=
"listing"
>
<h2>My Notes</h2>
@(Html.Kendo().Grid<DevelopmentNotesProject.Models.NoteForm>()
.Name(
"grid"
)
.Columns(columns =>
{
columns.Bound(c => c.Title).Width(160).ClientTemplate(
string
.Format(
"{0}..."
,
"#= formatter(Title) #"
));
columns.Bound(c => c.Text).Width(450).ClientTemplate(
string
.Format(
"{0}..."
,
"#= formatter(Text) #"
));
columns.ForeignKey(p => p.languageId, (System.Collections.IEnumerable)ViewData[
"lang"
],
"Id"
,
"Name"
).Title(
"Language"
).Width(140).EditorTemplateName(
"LangDropDown"
); <!--LangDropDown is the name of my partial view i have created in the Shared/Partial folder-->
columns.Command(command => { command.Edit(); command.Destroy(); });
})
.HtmlAttributes(
new
{ style =
"height: 380px;"
})
.Scrollable()
.Groupable()
.Sortable()
.Pageable(pageable => pageable
.Refresh(
true
)
.PageSizes(
true
)
.ButtonCount(5))
.DataSource(dataSource => dataSource
// Configure the grid data source
.Ajax()
// Specify that ajax binding is used
.Read(read => read.Action(
"Notes_Read"
,
"MyNotes"
))
// Set the action method which will return the data in JSON format
.Destroy(update => update.Action(
"Notes_Destroy"
,
"MyNotes"
))
.Update(update => update.Action(
"Notes_Update"
,
"MyNotes"
))
.Model(model =>
{
model.Id(p => p.id);
})
)
.Selectable()
)
</section>
@Html.ActionLink(
"Add a new note"
,
"Add"
,
"MyNotes"
)
@section Scripts {
@Scripts.Render(
"~/bundles/jqueryval"
)
}
My partial View:
@
using
Kendo.Mvc.UI
@(Html.Kendo().DropDownList()
.Name(
"Alllanguages"
)
.DataValueField(
"Id"
)
.DataTextField(
"Name"
)
.BindTo((System.Collections.IEnumerable)ViewData[
"lang"
])
)
Controller:
public
ActionResult Index()
{
var dbo =
new
UsersContext();
ViewData[
"lang"
] = dbo.Language.Select(b =>
new
{ Id = b.id, Name = b.lang });
return
View();
}
Thanks a lot for your help