This is a migrated thread and some comments may be shown as answers.

Inline edit dropdowns in Kendo Grid

1 Answer 242 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Brian
Top achievements
Rank 1
Brian asked on 12 May 2015, 08:12 PM

So I implemented inline editing on my grid, and it all works fine and saves fine. The only problem is that when I click the edit button, my drop downs start off on Index 0 (which is blank) but I want them to start on the value that was on the grid initially. So for example if I had two Rate Types, "Regular", and "Discount", and suppose that my row's rate type is "Discount". When I click the edit button, I expect the Dropdown to be defaulted to "Discount" which was the row's initial value, but instead it is just a blank value at index 0. Please help! Here is the code :

 

Gird :

      @(Html.Kendo().Grid<CirculationDatabase.DAL.Publication>()
            .Name("PubGrid")

            .Columns(columns =>
            {
                
                columns.Bound(p => p.PubName).Title("Publication").Width("300px").HeaderHtmlAttributes(new { style = "font-size:13px;" });
            })
           
            .Pageable()
            .Sortable()
            .Scrollable()
            .ClientDetailTemplateId("template")
            .HtmlAttributes(new { style = "height:730px;" })
            
            .DataSource(dataSource => dataSource
                .Ajax()
                .PageSize(20)
                .Events(events => events.Error("error_handler"))
                .Model(model => model.Id(p => p.Publication_ID))
                .Create(update => update.Action("EditingPopup_Create", "Grid"))
                .Read(read => read.Action("ReturnPublicationInfo", "Publication"))
                .Update(update => update.Action("EditingPopup_Update", "Grid"))
                .Destroy(update => update.Action("EditingPopup_Destroy", "Grid"))
            )
            
            .Events(events => events.DataBound("dataBound"))
           
        )

            <script id="template" type="text/kendo-tmpl">
                 @(Html.Kendo().TabStrip()
            .Name("tabStrip_#=Publication_ID#")
            .SelectedIndex(0)
            .Animation(animation => animation.Open(open => open.Fade(FadeDirection.In)))
            .Items(items =>
            {
                items.Add().Text("Domestic").Content(@<text>
             @(Html.Kendo().Grid<CirculationDatabase.DAL.proc_getPubGrid>()
                        .Name("subDomestic_#=Publication_ID#")
                        .Columns(columns =>
                        {
                            columns.Bound(x => x.PriceAmount).ClientTemplate("$" + "\\#=PriceAmount\\#");
                            columns.Bound(x => x.Rate).EditorTemplateName("rateEditor");
                            columns.Bound(x => x.DurationPeriod).Title("Duration (Months)").EditorTemplateName("durationEditor");
                            columns.Command(x => x.Edit());

                        })
                        
                           .Editable(editable => editable.Mode(GridEditMode.InLine))
                        
                        .DataSource(dataSource => dataSource
                            .Ajax()
                          
                            .PageSize(5)
                           .Events(events => 
                               {
                                   events.Error("error_handler");
                                       events.RequestEnd("onRequestEnd");
                                      
                               })
                .Model(model =>
                            {
                                model.Id(p => p.Price_ID);
                                model.Id(i => i.Duration_ID);
                                model.Field(i => i.DurationPeriod).DefaultValue(ViewData["DurationPeriod"] as CirculationDatabase.DAL.proc_getPubGrid);
                              
                            })
                .Create(update => update.Action("EditingPopup_Create", "Grid"))
                .Read(read => read.Action("ReturnPublicationInfoSubgrid", "Publication", new { pubID = "#=Publication_ID#", type = "Domestic" }))
                .Update(update => update.Action("UpdatePublicationInfo", "Publication").Data("dropDownValues"))
                .Destroy(update => update.Action("EditingPopup_Destroy", "Grid"))

                                )
                        
                        .Pageable()
                        .Sortable()
                        .ToClientTemplate())
               </text>);

                items.Add().Text("Foreign").Content(@<text>
             @(Html.Kendo().Grid<CirculationDatabase.DAL.proc_getPubGrid>()
                        .Name("subForeign_#=Publication_ID#")
                        .Columns(columns =>
                        {
                            columns.Bound(x => x.PriceAmount).ClientTemplate("$" + "\\#=PriceAmount\\#");
                            columns.Bound(x => x.Rate).EditorTemplateName("rateEditor");
                            columns.Bound(x => x.DurationPeriod).Title("Duration (Months)").EditorTemplateName("durationEditor");
                            columns.Command(x => x.Edit());

                        })

                         .Editable(editable => editable.Mode(GridEditMode.InLine))

                        .DataSource(dataSource => dataSource
                            .Ajax()
                           .PageSize(5)
                           .Model(model =>
                                       {
                                           model.Id(i => i.Price_ID);
                                        
                                 })
                              
                           .Events(events => 
                               {
                                   events.Error("error_handler");
                                       events.RequestEnd("onRequestEnd");
                               })
                            .Create(update => update.Action("EditingPopup_Create", "Grid"))
                            .Read(read => read.Action("ReturnPublicationInfoSubgrid", "Publication", new { pubID = "#=Publication_ID#", type = "Foreign" }))
                            .Update(update => update.Action("UpdatePublicationInfo", "Publication").Data("dropDownValues"))
                            .Destroy(update => update.Action("EditingPopup_Destroy", "Grid"))
                                )
                        .Pageable()
                        .Sortable()
                        .ToClientTemplate())
               </text>);
                    
            }).ToClientTemplate())
              
                </script>

 

 Edit Template :

@model CirculationDatabase.DAL.proc_getPubGrid


    @(Html.Kendo().DropDownList()
    .Name("Rate") 
    .DataTextField("Rate") 
    .DataValueField("Rate_ID") 
   
    .DataSource(source =>
    {
        source.Custom()
              .ServerFiltering(true)
              
              .Type("aspnetmvc-ajax") //Set this type if you want to use DataSourceRequest and ToDataSourceResult instances
              .Transport(transport =>
              {
                  transport.Read("populateRateDDL", "Publication");
                  
              })
              .Schema(schema =>
              {
                  schema.Data("Data") //define the [data](http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-schema.data) option
                        .Total("Total"); //define the [total](http://docs.telerik.com/kendo-ui/api/javascript/data/datasource#configuration-schema.total) option
              });
    })
)

 

Controller :

 

using CirculationDatabase.DAL;
using Kendo.Mvc.UI;
using Kendo.Mvc.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data;

namespace CirculationDatabase.Controllers
{
   

    public class PublicationController : Controller
    {
        private readonly EntitiesModel db = new EntitiesModel();
        public ActionResult Publications()
        {

            if (Request.IsAuthenticated)
            {
                return View();
            }
            else
            {
                return RedirectToAction("Login", "Login");
            }
        }

        public ActionResult ReturnPublicationInfo([DataSourceRequest] DataSourceRequest gridRequest)
        {


            IList<proc_getPubs> myViewModels = new List<proc_getPubs>();
           

                foreach (proc_getPubs pub in db.Proc_getPubs())
                {
                    myViewModels.Add(pub);
                }
            

            return Json(myViewModels.ToDataSourceResult(gridRequest), JsonRequestBehavior.AllowGet);
        }

        public ActionResult ReturnPublicationInfoSubgrid([DataSourceRequest] DataSourceRequest gridRequest, int pubID, string type)
        {


            IList<proc_getPubGrid> myViewModels = new List<proc_getPubGrid>();
           
                foreach (proc_getPubGrid pub in db.Proc_getPubGrid(pubID, type))
                {
                    myViewModels.Add(pub);
                }
          

            return Json(myViewModels.ToDataSourceResult(gridRequest), JsonRequestBehavior.AllowGet);
        }
        
        
        public ActionResult populateRateDDL([DataSourceRequest] DataSourceRequest dropDownRequest)
        {
            IList<RateType> myViewModels = new List<RateType>();
           
                foreach (RateType rate in db.ExecuteStoredProcedure<RateType>("proc_getRateType", null))
                {
                    RateType r = new RateType()
                    {
                        Rate_ID = rate.Rate_ID,
                        Rate = rate.Rate
                    };
                    myViewModels.Add(r);
                }
          

            return Json(myViewModels.ToDataSourceResult(dropDownRequest), JsonRequestBehavior.AllowGet);
        }

        [HttpPost]
        public ActionResult populateDurationDDL([DataSourceRequest] DataSourceRequest dropDownRequest)
        {
            IList<Duration> myViewModels = new List<Duration>();

                foreach (Duration duration in db.ExecuteStoredProcedure<Duration>("proc_getDuration", null))
                {
                    Duration dur = new Duration()
                    {
                        Duration_ID = duration.Duration_ID,
                        DurationPeriod = duration.DurationPeriod
                    };
                    myViewModels.Add(dur);
                }
           
            
            return Json(myViewModels.ToDataSourceResult(dropDownRequest), JsonRequestBehavior.AllowGet);
        }

       [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult UpdatePublicationInfo([DataSourceRequest] DataSourceRequest request, Price newPrice, string durationValue, string rateValue)
        {
            if (ModelState.IsValid)
            {

                Price priceToUpdate = db.Prices.FirstOrDefault(s => s.Price_ID == newPrice.Price_ID);
                priceToUpdate.Duration_ID = Convert.ToInt32(durationValue);
                priceToUpdate.Rate_ID = Convert.ToInt32(rateValue);
                priceToUpdate.PriceAmount = newPrice.PriceAmount;
                db.SaveChanges();
            }
            
            return Json(new[] { newPrice }.ToDataSourceResult(request, ModelState));
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }

       
     
    }
}

 

Entity :

 public partial class proc_getPubGrid
{
private int _publication_ID;
public virtual int Publication_ID
{
get
{
return this._publication_ID;
}
set
{
this._publication_ID = value;
}
}

private string _pubName;
public virtual string PubName
{
get
{
return this._pubName;
}
set
{
this._pubName = value;
}
}

private decimal? _priceAmount;
public virtual decimal? PriceAmount
{
get
{
return this._priceAmount;
}
set
{
this._priceAmount = value;
}
}

private int? _durationPeriod;
public virtual int? DurationPeriod
{
get
{
return this._durationPeriod;
}
set
{
this._durationPeriod = value;
}
}

private string _rate;
public virtual string Rate
{
get
{
return this._rate;
}
set
{
this._rate = value;
}
}

private int? _duration_ID;
public virtual int? Duration_ID
{
get
{
return this._duration_ID;
}
set
{
this._duration_ID = value;
}
}

private int? _rate_ID;
public virtual int? Rate_ID
{
get
{
return this._rate_ID;
}
set
{
this._rate_ID = value;
}
}

private int? _price_ID;
public virtual int? Price_ID
{
get
{
return this._price_ID;
}
set
{
this._price_ID = value;
}
}

}



 

1 Answer, 1 is accepted

Sort by
0
Alexander Popov
Telerik team
answered on 14 May 2015, 11:32 AM
Hi Brian,

This could happen in case the MVVM value binding attributes for the DropDownList are not properly generated. Try changing the type of the template's model from proc_getPubGrid to string and using a For editor:
@model string //should be matching the type of the Grid field 
 
@(Html.Kendo().DropDownListFor(m=>m)
     //.Name("Rate") not needed when using For helpers
   ....


Regards,
Alexander Popov
Telerik
 
Join us on our journey to create the world's most complete HTML 5 UI Framework - download Kendo UI now!
 
Tags
Grid
Asked by
Brian
Top achievements
Rank 1
Answers by
Alexander Popov
Telerik team
Share this question
or