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;
}
}
}