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"))I have a grid where I'm using the popup editor, and it's a custom template (.Editable(e => e.Mode(GridEditMode.PopUp).TemplateName("EIWOStatus")))
The popup is center screen, but I have some javascript that shows or hides certain controls based on what the user is entering. When all the controls are shown dynamically, the window is too low. I'd like to move it up, but the window itself doesn't seem to have an ID I can grab with jQuery in order to manipulate it.
How can I move the default starting position up so that as the controls get shown, it's never too low?
