问题
I have kendo mvc grid with inline edition. I want to edit my values in grid but when i click on combobox value and change it. It's not changing row value return old existing value
How can i solve this?
Here my grid and Template
@(Html.Kendo().Grid<MockUpForeNet.Controllers.CardDetailController.Limits>()
.Name("limitgrid").AutoBind(true)
.DataSource(dataBinding => dataBinding.Ajax()
.Read("GridLimitBinding", "CardDetail",new { rule = rule }).Update("UpdateLimit", "Transaction")
.Model(keys =>
{
keys.Id(c => c.Id);
keys.Field(c => c.Id).Editable(false);
keys.Field("DurationType", typeof(string)).Editable(true);
keys.Field("DurationValue", typeof(string)).Editable(true);
keys.Field("ValueType", typeof(string)).Editable(true);
keys.Field("MaxValue", typeof(string)).Editable(true);
}).Batch(true).ServerOperation(false)
)
.Events(e => e.DataBound("hidecolumn1"))
.Editable(editing => editing.Mode(Kendo.Mvc.UI.GridEditMode.InCell))
.ToolBar(commands =>
{
commands.Create().Text(" ");
commands.Save().SaveText(" ").CancelText(" ");
})
.Columns(columns =>
{
columns.Bound(e => e.MaxValue).Width(200).Title("Limit").ClientTemplate("#= ValueType == 'Amount' ? Row(MaxValue) : RowLiters(MaxValue) #");
columns.Bound(e => e.ValueType).Width(200).Title("Type").EditorTemplateName("ValueType");
columns.Bound(e => e.DurationValue).Width(200).Title("Duration");
columns.Bound(e => e.DurationType).Width(200).Title("Duration Type").EditorTemplateName("DurationType");
columns.Bound(e => e.Id).Visible(false);
columns.Bound(e => e.Id).Width(80).ClientTemplate("<img src='../../assets/images/icons/delete.svg' id='#=Id#' />").Filterable(false).IncludeInMenu(false).Title(" ");
})
//.Selectable()
.Sortable()
.Navigatable(configurator => configurator.Enabled(true))
///My template
@(Html.Kendo().ComboBox()
.Name("cbvaltype").ValuePrimitive(true)
.Items(i =>
{
i.Add().Text("Quantity").Value("Quantity");
i.Add().Text("Amount").Value("Amount");
})
)
回答1:
Personally, I would create a comboBox in kendo like this:
The column in which the comboBox box is located (Nothing has changed here):
columns.Bound(e => e.ValueType).Width(200).Title("Type").EditorTemplateName("ValueType");
The template:
@model // The model of the comboBox (Which as I have stated below should be `ValueType`)
@(Html.Kendo().ComboBoxFor(m => m)
.HtmlAttributes(new {data_skip = "true", data_bind = "defferedValue: ValueType"})
.PlaceHolder("Select a value")
.DataSource(source =>
{
source.Read("GetValues", "//Controller").ServerFiltering();
})
.MinLength(3)
.AutoBind(false)
.Filter(FilterType.Contains)
.DataValueField("ValueID")
.DataTextField("ValueText")
)
Controller:
public ActionResult GetValues(string text)
{
List<ValueModel> valueList = new List<ValueModel>();
if(!string.IsNullOrWhiteSpace(text)){
valueList = //Get a list of values which you want to be in this list (ie what you want to show in the comboBox)
// Above you should also do some LINQ to query against the list and get the correct values (ie .Where(x => x.ToLower().Contains(text.ToLower())).ToList())
}
return Json(valueList, JsonRequestBehaviour.AllowGet)
}
So, what are we doing above?
I have changed the template to accept a model class and we have edited the comboBox from a ComboBox to a ComboBoxFor. This uses the model passed into the view.
.DataValueField("ValueID")
.DataTextField("ValueText")
Are essentially the ID and text of the comboxBox.
NOTE: I believe, if not already, you should change ValueType variable to be a class called ValueType or whatever and that class should be define such as the following:
public class ValueType
{
public int ValueID{get;set;}
public string ValueText{get;set;}
}
MinLength(3) specifies that the user needs to type a minimum of 3 characters to start the comboBox search.
We call a controller method GetValues which accepts the parameter text and in here we check to make sure text is not null or empty and then return the values from a list of ValueType's where the Valuetext ToLower() contains the text passed into the function.
We then return that to the template which then sets the value in the grid.
来源:https://stackoverflow.com/questions/60411526/kendo-grid-inline-combobox-not-changing-value