
Hi,
I have problem with getting seleted dataitem to controller from AutoComplete. This work only in popup editor on grid, but with Ajax.BeginForm not :(, I don't know how popup editor submit data to controler but it send complete dataitem. If I use AutoComplete on Window in Ajax.BeginForm it send only string value.
Please can you help me with this. I don't want use ComboBox.
Best regards,
Ludek

We are finding out that the text in a disabled cell is too difficult to read as the font color is a too light of a grey. Is there a way to easily change the font color so that it is more readable for users?
Thanks.
Scott Rafferty

I have a chart that uses grouping and creates a legend at the top of the chart. While the chart is rendering, the legend that appears at the top of the chart contains 'd NaN/NaN/0NaN' as seen in the attached screenshot. The legends should contain dates in the format of 'ddd dd/MM/yyyy', so I'm assuming the dates are not yet known, so the legend is displaying in this way.
Is there a way of hiding this until the legend actually has data, because having 'd NaN/NaN/0NaN' show up in the chart does not look good.
Regards,
Shawn
@model string@(Html.Kendo().Grid<SampleDataSummaryDto>() .Name("Grid") .Columns(columns => { columns.Bound(l => l.Id).Title("Name"); columns.Bound(p => p.CompanyName).Title("Company Name"); columns.Bound(p => p.PhoneNumber).Title("Phone"); columns.Bound(p => p.EmailAddress).Title("Email"); }) .HtmlAttributes(new { style = "height:450px" }) .Scrollable() .DataSource(dataSource => dataSource .Ajax() .Read(read => read.Action("SearchResults_Read", "Prospect", new { SearchText = Model })) ) ) public PartialViewResult loadSampleData(string SearchText) { return PartialView("EditorTemplates/loadSampleData", SearchText); }
public ActionResult SearchResults_Read(string SearchText)
{
var results= myService.GetByIdentifiers(SearchText, 20);
var dsResult = results.ToDataSourceResult(new DataSourceRequest());
return Json(dsResult);
}
I am passing the searchText to partial view and thinking that my Grid view use that search text asynchronously would call 'SearchResults_Read' and passing the SearchText as action param.
I appreciate any suggestions on why this is not working?
Thank You,
Uday

I have a page showing two grids, grid1 and grid2, and a separate stand alone button "export as excel"
I would like the button to make a single excel download with grid1 in worksheet1 and grid2 in worksheet2.
Q: Is this doable ?
Take the following PanelBar:
@(Html.Kendo().PanelBar() .Name("topicList") .BindTo(Model, mappings => { mappings.For<DropDownTopicList>(b => b.ItemDataBound((item, category) =>{ item.Text = category.Category; }).Children(category => category.Topics)); mappings.For<TopicBank>(b => b.ItemDataBound((item, topic) =>{ item.Id = topic.ID.ToString(); item.Text = topic.Title + " - " + topic.Description; })); }) .Events(ev => ev.Select("pbSelect")) )
How do I get the Id of the selected Item?
I'm trying to creare a new project, but I have noticed that it doesn't propose the choice of authentication type (like Microsoft template standard).
Is it correct?
For the past few days I've been trying to get a grid working for a relatively complex model. I want to use a remote datasource for populating the initial grid, but for adding and editing I need to query other datasources for several columns, to get filtering and sorting in a dropdownlist.
I've encountered several problems, with things like binding the dropdowns and validating the editor. I'll post some of my code here, maybe someone here can provide a suggestion on what I'm doing wrong/forgetting.
Controller:
// GET: Settings public ActionResult Index() { return View(); } public async Task<ActionResult> GetSettings([DataSourceRequest] DataSourceRequest request) { DiscountSettingsViewModel viewModel = await _discountService.GetViewModel(); var result = viewModel.Discounts.ToDataSourceResult(request); result.Total = viewModel.Discounts.Count; return Json(result, JsonRequestBehavior.AllowGet); }public async Task<ActionResult> GetItemGroups([DataSourceRequest] DataSourceRequest request) { var queryParser = new DataSourceODataParser(); List<ItemGroupViewModel> result = await _discountService.GetItemGroups(queryParser.Parse(request)); return Json(new DataSourceResult {Data = result, Total = result.Count}, JsonRequestBehavior.AllowGet); } public async Task<ActionResult> GetItems([DataSourceRequest] DataSourceRequest request) { var queryParser = new DataSourceODataParser(); List<ItemViewModel> result = await _discountService.GetItems(queryParser.Parse(request)); return Json(new DataSourceResult {Data = result, Total = result.Count}, JsonRequestBehavior.AllowGet); } public async Task<ActionResult> GetResellers([DataSourceRequest] DataSourceRequest request) { var queryParser = new DataSourceODataParser(); List<ResellerViewModel> result = await _discountService.GetResellers(queryParser.Parse(request)); return Json(new DataSourceResult { Data = result, Total = result.Count }, JsonRequestBehavior.AllowGet); } public async Task<ActionResult> GetCustomers([DataSourceRequest] DataSourceRequest request) { var queryParser = new DataSourceODataParser(); List<CustomerViewModel> result = await _discountService.GetCustomers(queryParser.Parse(request)); return Json(new DataSourceResult { Data = result, Total = result.Count }, JsonRequestBehavior.AllowGet); }
ViewModels:
public class DiscountSettingsViewModel { public int SubscriptionId { get; set; } public List<DiscountViewModel> Discounts { get; set; } } public class DiscountViewModel { public int Id { get; set; } public ItemGroupViewModel ItemGroup { get; set; } public ItemViewModel Item { get; set; } public ResellerViewModel Reseller { get; set; } public CustomerViewModel Customer { get; set; } public DateTime? StartDate { get; set; } public DateTime? EndDate { get; set; } public bool IsExtra { get; set; } public double Discount { get; set; } public DiscountViewModel() { Id = 0; ItemGroup = new ItemGroupViewModel(); Item = new ItemViewModel(); Reseller = new ResellerViewModel(); Customer = new CustomerViewModel(); IsExtra = false; Discount = 0; } } public class ItemGroupViewModel { public string Code { get; set; } public string Description { get; set; } public ItemGroupViewModel() { Code = ""; Description = ""; } } public class ItemViewModel { public string Code { get; set; } public string Description { get; set; } public ItemViewModel() { Code = ""; Description = ""; } } public class ResellerViewModel { public Guid? ID { get; set; } public string Code { get; set; } public string Name { get; set; } public Guid? Classification1 { get; set; } public ResellerViewModel() { ID = Guid.Empty; Code = ""; Name = ""; Classification1 = Guid.Empty; } } public class CustomerViewModel { public Guid? ID { get; set; } public string Code { get; set; } public string Name { get; set; } public ResellerViewModel Reseller { get; set; } public CustomerViewModel() { ID = Guid.Empty; Code = ""; Name = ""; Reseller = new ResellerViewModel(); } }
Main view:
<h2>Discount Settings</h2><script type="text/javascript"> kendo.data.binders.widget.defferedValue = kendo.data.Binder.extend({ init: function (widget, bindings, options) { kendo.data.Binder.fn.init.call(this, widget.element[0], bindings, options); this.widget = widget; this._change = $.proxy(this.change, this); this.widget.bind("change", this._change); }, refresh: function () { if (!this._initChange) { var widget = this.widget; var value = this.bindings.defferedValue.get(); if (value) { if (widget.options.autoBind === false) { //Bind the widget with single item if deffered binding is used widget.dataSource.data([value]); widget.value(value[widget.options.dataValueField]); } else { //set widget value directly this.widget.value(value[widget.options.dataValueField]); } } } }, change: function () { this._initChange = true; this.bindings.defferedValue.set(this.widget.dataItem() || null); this._initChange = false; }, destroy: function () { this.widget.unbind("change", this._change); } });</script>@(Html.Kendo().Grid<DiscountViewModel>() .Name("Discounts") .Columns(col => { col.Bound(i => i.ItemGroup) .Title(Resource.ItemGroup) .ClientTemplate("#: data.ItemGroup ? data.ItemGroup.Code : '[none]' #") .EditorTemplateName("ItemGroupLookup") .Filterable(false) .Sortable(true); col.Bound(i => i.Item) .Title(Resource.Item) .ClientTemplate("#: data.Item ? data.Item.Code : '[none]' #") .EditorTemplateName("ItemLookup") .Filterable(false) .Sortable(true); col.Bound(i => i.Reseller) .Title(Resource.Reseller) .ClientTemplate("#: data.Reseller ? data.Reseller.Name : '[none]' #") .EditorTemplateName("ResellerLookup") .Filterable(false) .Sortable(true); col.Bound(i => i.Customer) .Title(Resource.Customer) .ClientTemplate("#: data.Customer ? data.Customer.Name : '[none]' #") .EditorTemplateName("CustomerLookup") .Filterable(false) .Sortable(true); col.Bound(i => i.StartDate).Title(Resource.StartDate).Format("{0:dd-MM-yyyy}"); col.Bound(i => i.EndDate).Title(Resource.EndDate).Format("{0:dd-MM-yyyy}"); col.Bound(i => i.IsExtra).Title(Resource.IsExtra); col.Bound(i => i.Discount).Title(Resource.Discount); col.Command(command => { command.Edit().Text(Resource.Edit); command.Destroy().Text(Resource.Delete); }).Width(250); }) .Sortable(s => s.SortMode(GridSortMode.MultipleColumn)) .ToolBar(toolbar => toolbar.Create().Text(Resource.Add)) .Editable(editable => editable.Mode(GridEditMode.InLine)) .Pageable() .DataSource(source => source .Ajax() .PageSize(20) .Events(events => events.Error("error_handler")) .Model(m => { m.Id(i => i.Id); m.Field(p => p.ItemGroup); m.Field(p => p.Item); m.Field(p => p.Reseller); m.Field(p => p.Customer); m.Field(p => p.StartDate); m.Field(p => p.EndDate); m.Field(p => p.IsExtra); m.Field(p => p.Discount); }) .Create(update => update.Action("CreateSetting", "Settings")) .Read(read => read.Action("GetSettings", "Settings")) .Update(update => update.Action("UpdateSetting", "Settings")) .Destroy(update => update.Action("DestroySetting", "Settings")) ) .NoRecords(Resource.NoSettings))
Example EditorTemplate:
@model NuCall.ViewModels.ItemGroupViewModel@(Html.Kendo().DropDownListFor(m => m) .HtmlAttributes(new { data_skip = "true", data_bind = "deferredValue: ItemGroup" }) .OptionLabel("--none--") .DataSource(source => { source.Custom() .ServerFiltering(true) .ServerPaging(true) .PageSize(20) .Type("aspnetmvc-ajax") .Transport(transport => transport.Read("GetItemGroups", "Settings")) .Schema(schema => schema .Data("Data") .Total("Total") .Errors("Errors")); }) .MinLength(1) .AutoBind(false) .Filter(FilterType.StartsWith) .DataValueField("Code") .DataTextField("Code"))