Any pointers on how to proceed?
In picture 1: pic 1: ActualStartDate & ActualFinishDate allow null-able value.
In Picture 2: because their types allow nullable so the values of Actual Start Date & Actual Finish Date must be empty. Because I am using .DateInput(true) in the controls so now they have value 'day month year'.

I am reviewing some code and I am trying to find documentation for the UploadBlobs method with no luck.
Could someone provide a link?

Hello,
How do you generate a unique name for a control that is part of a template? I have a DropDownList in my template for a TaskBoard but only the first instance works since the name of each is the same I assume. The browser warns me too that that is the case. Appreciate any help.
-Scott

I have an enum in my model for Currency, like so
public class Project
{
public Currencies Money { get; set; }
public int CurrencyId { get; set; }
public string CurrencyName { get; set; }
public string ContractPerson { get; set; }
public enum Currencies
{
[Display(Name = "Euro")]
Euro = 1,
[Display(Name = "USD")]
USD = 2,
[Display(Name = "MKD")]
MKD = 3
}
}and I am trying to display the text instead of the id in my Kendo grid but I am not sure how to proceed. I can show the currencyId but not sure how to show the actual text. This is my grid
<div class="clearfix">
@(Html.Kendo().Grid<Projects.Domain.Project>()
.Name("projectsGrid")
.ToolBar(toolbar => toolbar.Create())
.ToolBar(e =>
{
e.Custom().Text("Export to excel").HtmlAttributes(new { id = "excelButton" });
})
.Editable(editable => editable.Mode(GridEditMode.PopUp))
.Pageable(pageable => pageable.Input(true).Numeric(false))
.PersistSelection()
.Scrollable()
.Sortable()
.Events(ev => ev.Change("onChange"))
.Filterable()
.ColumnMenu()
.Groupable(false)
.Columns(columns =>
{
columns.Select().Width(50);
columns.Bound(c => c.CurrencyId).Title("currency").Width("200px");
columns.Bound(c => c.ContractPerson).Title("ContractPerson").Width("200px");
columns.Bound(c => c.UrlWiki).Title("UrlWiki").Width("200px");
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(160);
})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Events(events => events.Error("error_handler"))
.Model(model => model.Id(p => p.Id))
.Create(update => update.Action("EditingPopup_Create", "Projects"))
.Read(read => read.Action("GetProjects", "Projects"))
.Update(update => update.Action("EditingPopup_Update", "Projects"))
.Destroy(update => update.Action("EditingPopup_Destroy", "Projects"))
)
)
</div>Any pointers on how to proceed?
I have a view for Create as well as Edit. My question is can I use those views to show when I click the Create New Popup dialog?
So if I click the Add new record, it'll show the built in grid popup dialog window. Instead of the built in dialog, can I set the grid to show my own Create view? The Create.cshtml? The same goes for the Edit view, when I click the Edit button, can I set it to use the Edit.cshtml instead of the built it edit popup dialog?

Good Day,
I am actually looking to find a way to save only filter, sort and current paging options when a user interract with the grid. I have seen this demo https://demos.telerik.com/aspnet-core/grid/persist-state, but I would like it to be automatically instead of having external button to do the action.
I have tried also binding on the databound event using a flag like so, but it only works the first time. My function is a little bit generic, because I would like to automatically do it for every grid in the application without having to configure anything.
let stateChanged = false;
$('.k-grid').data('kendoGrid').bind('filter', function (e) {
stateChanged = true;
});
$('.k-grid').data('kendoGrid').bind('sort', function (e) {
stateChanged = true;
});
$('.k-grid').data('kendoGrid').bind('dataBound', function (e) {
if (stateChanged) {
const grid = e.sender;
const storageKey = generateStorageKey(grid);
const options = grid.getOptions();
saveGridState(options, storageKey);
stateChanged = false;
}
});Is there any other way to actually save the state of the grid immediately after the user interract with the grid?
Thank you :)

Hi there,
I want to use Combobox editor for data editing, but it only used with local binding:
@(Html.KGrid(gridInfo).Columns(d=>d.ForeignKey(p => p.TableName, (System.Collections.IEnumerable)ViewData["TableNames"], "Id", "Name")))@(Html.KGrid(gridInfo).Columns(d=>d.ForeignKey(p => p.TableName, ds => ds.Read(r =>r.Url("/sys/gridinfo/gettablenames")), "Id", "Name")))If I use remote binding it show Dropdown List editor, I tried .EditorTemplateName("GridForeignKey") but it doesn't work.
Editor template GridForeignKey:
@model object
@(
Html.Kendo().ComboBoxFor(m => m)
.ValuePrimitive(true)
.Filter("contains")
.BindTo((SelectList)ViewData[ViewData.TemplateInfo.GetFullHtmlFieldName("") + "_Data"])
)

I am using the Kendo grid to show data. I am also using a function to export the selected rows to excel. The thing is, if I select multiple rows from multiple pages it only export the rows from the last page or the page I am currently at.
<div class="container">
<div class="clearfix">
@(Html.Kendo().Grid<Projects.Domain.Project>()
.Name("projectsGrid")
.ToolBar(toolbar => toolbar.Create())
.ToolBar(e =>
{
e.Custom().Text("Export to excel").HtmlAttributes(new { id = "excelButton" });
})
.Editable(editable => editable.Mode(GridEditMode.PopUp))
.Pageable(pageable => pageable.Input(true).Numeric(false))
.PersistSelection()
.Scrollable()
.Sortable()
.Events(ev => ev.Change("onChange"))
.Filterable()
.ColumnMenu()
.Groupable(false)
.Columns(columns =>
{
columns.Select().Width(50);
columns.Bound(c => c.Id).Title("ID").Hidden();
columns.Bound(c => c.ProjectName_EN).Title("ProjectName_EN").Width("250px");
columns.Bound(c => c.ProjectName_MK).Title("ProjectName_MK").Width("200px");
columns.Bound(c => c.ContractNumber).Title("ContractNumber").Width("200px");
columns.Bound(c => c.ContractStartDate).Title("Start date").Width("200px");
columns.Bound(c => c.ContractEndDate).Title("End date").Width("200px");
columns.Bound(c => c.Description_MK).Title("desc mk").Width("200px");
columns.Bound(c => c.Description_EN).Title("desc en").Width("200px");
columns.Bound(c => c.Amount).Title("amount").Width("200px");
columns.Bound(c => c.CurrencyId).Title("currency id").Width("200px");
columns.Bound(c => c.ContractPerson).Title("ContractPerson").Width("200px");
columns.Bound(c => c.UrlWiki).Title("UrlWiki").Width("200px");
columns.Bound(c => c.StatusId).Title("StatusId").Width("200px");
columns.Bound(c => c.Client).Title("Client").Width("200px");
columns.Bound(c => c.ProjectManager).Title("proj manager").Width("200px");
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(160);
})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Events(events => events.Error("error_handler"))
.Model(model => model.Id(p => p.Id))
.Create(update => update.Action("EditingPopup_Create", "Projects"))
.Read(read => read.Action("GetProjects", "Projects"))
.Update(update => update.Action("EditingPopup_Update", "Projects"))
.Destroy(update => update.Action("EditingPopup_Destroy", "Projects"))
)
)
</div>
</div>My js functions
var globalRows;
var d = new Date();
var fileName = "Projects - " + d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
function onChange(arg) {
var grid = $("#projectsGrid").getKendoGrid();
var rows = [{
cells: [
{ value: "Project name MK" },
{ value: "Project name EN" },
{ value: "Contract number" },
{ value: "Contract start date" },
{ value: "Contract end date" },
{ value: "Description MK" },
{ value: "Description EN" },
{ value: "Ammount" },
{ value: "Currency" },
{ value: "Contract person" },
{ value: "Wiki URL" },
{ value: "Project manager" },
{ value: "Status" },
{ value: "Contractor" }
]
}];
var trs = $("#projectsGrid").find('tr');
for (var i = 0; i < trs.length; i++) {
if ($(trs[i]).find(":checkbox").is(":checked")) {
var dataItem = grid.dataItem(trs[i]);
console.log("dataItem", dataItem);
rows.push({
cells: [
{ value: dataItem.ProjectName_MK },
{ value: dataItem.ProjectName_EN },
{ value: dataItem.ContractNumber },
{ value: dataItem.ContractStartDate },
{ value: dataItem.ContractEndDate },
{ value: dataItem.Description_MK },
{ value: dataItem.Description_EN },
{ value: dataItem.Amount },
{ value: dataItem.CurrencyName },
{ value: dataItem.ContractPerson },
{ value: dataItem.UrlWiki },
{ value: dataItem.ProjectManagerId },
{ value: dataItem.StatusId },
{ value: dataItem.ContractorId }
]
});
}
}
globalRows = rows;
}
$("#projectsGrid").on("click", "#excelButton", function (e) {
e.preventDefault(); //prevents postback
var workbook = new kendo.ooxml.Workbook({
sheets: [
{
columns: [
{ autoWidth: true },
{ autoWidth: true }
],
title: "Projects",
rows: globalRows
}
]
});
kendo.saveAs({ dataURI: workbook.toDataURL(), fileName: fileName });
});
Any pointers or suggestions on how to proceed? How not to lose the rows from the previous pages?
