Hi team,
About the editor's image browser upload service with imageBrowser.transport.uploadUrl : is there a possibility to set the saveField like it's possible with the upload widget ? Seems the default name is "file" !
Content-Disposition: form-data; name="file"; filename="xxx.jpg"
Content-Type: image/jpeg
Best regards,
Laurent.
I have a grid with a Popup upon edit, but I only want to show 1 or 2 fields in the popup not all of the fields from the selected row, is that possible?
Thanks!
I have a kendoListBox with 12,000 items. This is connected with another kendoListBox and has draggable enabled. Each listbox item has a template applied. The listbox is inside of a modal. When I click a button to open the modal there is a 3 second delay for the modal to open. Then when I try to drag an item or click the arrow buttons to move the item to the opposite list there is another 3 second delay before anything happens. The issue occurred when I changed from a list with only a couple hundred items to this large list. I had this problem with some dropdown boxes and fixed those with virtualization but virtualization does not appear to be available or work here. How do I increase performance so that these components are usable?
<
div
id
=
"baseModal"
>
<
div
class
=
"modal-content"
>
<
div
class
=
"modal-header"
>
<
div
id
=
"baseModalTitle"
class
=
"modal-title"
>My Modal</
div
>
</
div
>
<
div
class
=
"modal-body"
>
<
div
id
=
"exceptions"
class
=
"kendo-dnd-component"
>
<
div
class
=
"dnd-list-boxes"
>
<
div
class
=
"available-options-container"
>
<
label
for
=
"availableItems"
>Applies To</
label
>
<
span
class
=
"k-list-filter"
>
<
input
id
=
"availableItemsSearchBox"
class
=
"k-textbox"
><
span
class
=
"k-icon k-i-zoom"
></
span
>
</
span
>
<
select
id
=
"availableItems"
class
=
"browser-default"
></
select
>
</
div
>
<
div
class
=
"selected-options-container"
>
<
label
for
=
"selectedItems"
>Excludes</
label
>
<
span
class
=
"k-list-filter"
>
<
input
id
=
"selectedItemsSearchBox"
class
=
"k-textbox"
><
span
class
=
"k-icon k-i-zoom"
></
span
>
</
span
>
<
select
id
=
"selectedItems"
class
=
"browser-default"
></
select
>
</
div
>
</
div
>
</
div
>
</
div
>
</
div
>
<
div
class
=
"modal-footer"
>
<
div
class
=
"right-align"
>
<
button
type
=
"button"
class
=
"modal-close waves-effect btn-flat"
>Cancel</
button
>
<
button
type
=
"button"
class
=
"btn waves-effect "
>Accept</
button
>
</
div
>
</
div
>
</
div
>
<
script
>
function createItemsDragLists() {
// List Boxes
$("#availableItemsSearchBox").on("input", function (e) {
var listBox = $("#availableItems").getKendoListBox();
var sarchString = $(this).val();
listBox.dataSource.filter({
logic: "or",
filters: [
{ field: "itemID", operator: "contains", value: sarchString },
{ field: "itemName", operator: "contains", value: sarchString }
]
});
});
$("#selectedItemsSearchBox").on("input", function (e) {
var listBox = $("#selectedItems").getKendoListBox();
var sarchString = $(this).val();
listBox.dataSource.filter({
logic: "or",
filters: [
{ field: "itemID", operator: "contains", value: sarchString },
{ field: "itemName", operator: "contains", value: sarchString }
]
});
});
$("#availableItems").kendoListBox({
connectWith: "selectedItems",
draggable: true,
autoScroll: true,
dropSources: ["selectedItems"],
toolbar: {
position: "right",
tools: ["transferTo", "transferFrom", "transferAllTo", "transferAllFrom"]
},
selectable: "multiple",
dataSource: items,
template: "<
span
class
=
'listItemID'
>#: data.itemID #</
span
><
span
class
=
'listItemName'
>#: data.itemName#</
span
>",
valueTemplate: "#: itemName #",
dataTextField: "itemName",
dataValueField: "itemID"
});
$("#selectedItems").kendoListBox({
connectWith: "availableItems",
draggable: {
placeholder: function (element) {
return element.clone().css({
"opacity": 0.3,
"border": "1px dashed #000000"
});
}
},
dropSources: ["availableItems"],
selectable: "multiple",
template: "<
span
class
=
'listItemID'
>#: data.itemID #</
span
><
span
class
=
'listItemName'
>#: data.itemName#</
span
>",
valueTemplate: "#: itemName #",
dataTextField: "itemName",
dataValueField: "itemID"
});
}
</
script
>
I have a grid that shows data from an uploaded file, the user can delete rows that do now want to upload to the database. If I allow this, then the save/create pass an empty datasource object to my create method in the controller. Is it possible to allow for row deletion and pass the remaining data to my controller so they can all be inserted into the table?
Hello.
I'm having a problem implementing the following scenario:
After the grid is loaded (binding to local data), in some cases, I need to apply the filters, paging, and selection from a previous state of the grid. If I do this inside the databound event, this will cause an infinte loop (as I've read and experience first-hand). How / where can I add the code from ApplyPreviousSettings (see below js code) so that it can work automatically?
E.g. of scenario in cause.
When on page "Users\Index" filter the grid (filterMode = row), change page (if necessary), and select an item.
Click on Edit (which redirects the edit page for the selected user) - at the point of leaving the "Users\Index" , I save in localstorage the grid's state (not all of it - only filter, paging and selection)
When clicking on Save or Cancel, the Index page (with the grid) will be displayed AND it is at this time that I want to "restore" the grid according to the data in the localstorage.
I've attached screenshots for the above scenario and a video.
The grid looks like this:
@(Html.Kendo().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.Bound(p => p.Id).Title("#= Id #").Hidden(true).HtmlAttributes(new { id = "#= Id #" });
columns.Bound(p => p.FirstName).Title(Resource.Firstname).Filterable(f => f.Cell(c => c.Operator("Contains").ShowOperators(false).Template("EnableAutoFiltering")));
columns.Bound(p => p.Name).Title(Resource.Lastname).Filterable(f => f.Cell(c => c.Operator("Contains").ShowOperators(false).Template("EnableAutoFiltering")));
columns.Bound(p => p.EmailAddress).Title(Resource.Email).Filterable(f => f.Cell(c => c.Operator("Contains").ShowOperators(false).Template("EnableAutoFiltering")));
columns.Bound(p => p.CompletelyEquiped).Title(Resource.CompletelyEquipped)
.ClientTemplate("<div style='text-align: center;'><input type='checkbox' value='#= CompletelyEquiped #' disabled='disabled' " +
"# if (CompletelyEquiped) { #" +
"checked='checked'" +
"# } #" +
"/> </div>").Filterable(filterable =>
filterable.Messages(m => m.IsFalse(Resource.No_UserIndex))
.Messages(m => m.IsTrue(Resource.Yes_UserIndex)));
columns.Bound(p => p.BusinessUnit).Title(Resource.BusinessUnit_UserCreate).Filterable(f => f.Cell(c => c.Operator("Contains").ShowOperators(false).Template("EnableAutoFiltering")));
columns.Command(c => c.Destroy());
})
.ToolBar(toolbar =>
{
toolbar.Template(@<text>
<div class="toolbar">
<a href="@Url.Action("Create", "User")" class="k-button k-button-icontext" id="CreateButton"><span class='k-icon k-add'></span>@Resource.Create</a>
@Html.Kendo().Button().Name("EditButton").Content(Resource.Edit).Events(e => e.Click("EditClick")).SpriteCssClass("k-icon k-edit")
</div>
</text>);
})
.HtmlAttributes(new {style = "width: 125%;"})
.Pageable(pageable => pageable.Input(true).Numeric(false))
.Sortable()
.Events(e => e.DataBound("CustomizeFilterMenu"))
.Selectable(s => s.Mode(GridSelectionMode.Single))
.Filterable(ftb => ftb.Mode(GridFilterMode.Row))
.DataSource(dataSource => dataSource
.Ajax()
.ServerOperation(false)
.Model(model => model.Id(p => p.Id))
.PageSize(10)
.Destroy("Delete", "User")
))
Javascript:
function EnableAutoFiltering(args) {
args.element.css("width", "90%").addClass("k-textbox").keydown(function (e) {
setTimeout(function () {
$(e.target).trigger("change");
});
});
}
function EditClick() {
var grid = $('#Grid').data("kendoGrid");
var selectedItem = grid.dataItem(grid.select());
if (selectedItem == null) {
alert("Please select row!");
} else {
if (window.location.pathname.endsWith("Index")) {
window.location = "../User/Edit/" + selectedItem["Id"];
} else {
window.location = "../" + window.location.pathname.split("/")[1] + "/User/Edit/" + selectedItem["Id"];
}
}
}
function ApplyPreviousSettings() {
var gridOptions = localStorage["kendo-grid-options"];
if (gridOptions === "null" || gridOptions === undefined) {
} else {
var grid = $("#Grid").data("kendoGrid");
var state = JSON.parse(gridOptions);
grid.dataSource.filter(state.filter);
grid.pager.page(parseInt(state.page));
var row = $("#Grid").find("tbody>tr>td[id= " + state.selectedUserId + "]").parent();
grid.select(row);
}
}
function CustomizeFilterMenu(args) {
var parents = $(":radio").parent();
if (!$(parents[0]).hasClass("RadioButtonFilterStyle")) {
$(parents[0]).addClass("RadioButtonFilterStyle");
}
}
window.onbeforeunload = function (e) {
if (e.target.activeElement.id === "EditButton" || e.target.activeElement.id === "CreateButton") {
var grid = $("#Grid").data("kendoGrid");
var dataSource = grid.dataSource;
var state =
{
page: dataSource.page(),
filter: dataSource.filter(),
selectedItem : grid.dataItem(grid.select()),
selectedUserId : grid.dataItem(grid.select()).Id
};
localStorage["kendo-grid-options"] = kendo.stringify(state);
} else {
localStorage["kendo-grid-options"] = null;
}
};
$(document).ready(function () {
$("#KendoGrid").removeAttr("hidden");
kendo.ui.progress($("KendoGrid"), false);
});
Important things to note:
Under the grid (as seen in the screenshots) there is a button which does (if I click it manually) exactly what I need to do automatically (the button with text: "ceva") - the button calls the js method ApplyPreviousSettings.
Also, here is a link to a video I've recorded, that I hope will clarify even further what I want to do.
https://www.dropbox.com/s/14wb1vuz76sr3st/sampleVideo2.zip?dl=0
Thank you.
Vlad
[
{
"text"
:
"Furniture"
,
"items"
: [
{
"text"
:
"Tables & Chairs"
},
{
"text"
:
"Sofas"
},
{
"text"
:
"Occasional Furniture"
}
] },
{
"text"
:
"Decor"
,
"items"
: [
{
"text"
:
"Bed Linen"
},
{
"text"
:
"Curtains & Blinds"
},
{
"text"
:
"Carpets"
}
] }
]
var
data =
new
kendo.data.HierarchicalDataSource({
transport: {
read: {
url:
"/test.json"
}
}
});
$(
"#treeview"
).kendoTreeView({
dataSource: data
});
I'm having a problem getting the filters and sort information from Kendo Grid to my MVC controller. I am using a service to pass form data and DataSource data to the MVC Controller.
Here is my Kendo Grid DataSource:
dataSource: new kendo.data.DataSource({
transport: { read: function (e) { generalsearchService.submitSearch(e.data, form)
.then(function success(response) { e.success(response.data);});}},
schema: { data: "Data", total: "Total"},
pageSize: 25,
serverPaging: true,
serverFiltering: true,
serverSorting: true}),
Here is my Service code:
this.submitSearch = function (command, form) {return $http.post('/SSQV4/SSQV5/Search/SubmitCriteria', {'command': command, 'form': form});
Here is my MVC Controller Method definition:
public async Task<ActionResult> SubmitCriteria(DataSourceRequest command, ContractorSearchViewModel form)
The problem is when it hits the above method, "command" no longer contains filter and sort information.
attempting to add type: aspnetmvc-ajax throws an error in kendo.all.min.js -- Unable to get property 'slice' of undefined or null reference.
Any assistance is greatly appreciated.
Hi,
I apologize if this is a repeated question, but does anyone know what this error means? I've searched my code-base and only found mention of 'tagName' in the jQuery and Kendo libraries ("e.target.tagName", "getElementByTagName()")
Its not causing problems, but our QC dept keep bringing it up.
Thanks in advace,
Grant
When using the Kendo Window in JQuery or MVC, you can bypass the constrained area by pinning the window and then attempting to move it. Is this expected behavior?
You can see an example by going to your online demos, pin the window, then attempt to move it.
https://demos.telerik.com/kendo-ui/window/constrain-movement
<!DOCTYPE html>
<
html
>
<
head
>
<
title
></
title
>
<
link
rel
=
"stylesheet"
href
=
"styles/kendo.common.min.css"
/>
<
link
rel
=
"stylesheet"
href
=
"styles/kendo.default.min.css"
/>
<
link
rel
=
"stylesheet"
href
=
"styles/kendo.default.mobile.min.css"
/>
<
script
src
=
"js/jquery.min.js"
></
script
>
<
script
src
=
"js/kendo.all.min.js"
></
script
>
</
head
>
<
body
>
<
div
id
=
"example"
>
<
div
id
=
"container"
>
<
div
id
=
"window"
>
<
p
>Alvar Aalto is one of the greatest names in modern architecture and design.
Glassblowers at the iittala factory still meticulously handcraft the legendary vases
that are variations on one theme, fluid organic shapes that let the end user decide the use.
</
p
>
</
div
>
</
div
>
<
script
>
$(document).ready(function() {
$("#window").kendoWindow({
width: "300px",
height: "200px",
draggable: {
containment: "#container"
},
title: "About Alvar Aalto",
actions: ["Minimize", "Maximize", "Pin"]
}).data("kendoWindow").open();
});
</
script
>
<
style
>
#container {
height: 400px;
width: 600px;
position: relative;
border: 1px solid rgba(20,53,80,0.14);
}
</
style
>
</
div
>
</
body
>
</
html
>