I want to display a boolean value in an ASP.NET Core Kendo grid column. However, I need it to display a checkbox in the column because I don't want to show the users the raw data. So, I put in a custom client template because it's not an option to have booleans display a checkbox despite that seeming like an option that should be available by default. However, this grid is supposed to be editable inline using the default CRUD operations and you have to click on the cells to bring up the editor.
The default editor for a boolean column is a checkbox. So, the users click on a checkbox to bring up a different checkbox and it looks like it just didn't work. If I make the initial checkbox greyed out, it looks like they can't edit it. So, no matter what I do, I can't make a column a checkbox and use the default editor without a bunch of ugly design issues which is ridiculous.
Am I just missing something? Is there a better way than resorting to doing scripting with Javascript and setting the column to uneditable?
Using custom validity as below...
@(Html.Kendo()
.TextBoxFor(m => m.Task)
.Value(null)
.HtmlAttributes(new
{
required = "required",
oninvalid = "this.setCustomValidity('Enter a task')",
oninput = "this.setCustomValidity('')"
})
)
I've tried to do the same for other controls (numeric textbox, datetime picker, autocomplete) but it doesn't work.
For example, when trying the same thing for numeric textbox, in console I get an error "An invalid form control with name='Advance' is not focusable.
@(Html.Kendo()Hi,
I upgraded my asp.net mvc project to DotNet7 and updated Telerik to Progress® Telerik® UI for ASP.NET Core version 2023.3.1010, which is the latest. This Telerik package pulls in Microsoft.AspNetCore.Mvc.Core and Microsoft.AspNetCore.Mvc.Cors. Both these packages are depreciated and contain vulnerabilities as noted in CVE-2019-0548: https://msrc.microsoft.com/update-guide/en-US/advisory/CVE-2019-0548
Questions:
- Do you plan on removing the reference to the depreciated packages? Apparently everything is now included in the base aspnet SDK Microsoft.NET.Sdk.Web.
- Does using this package leave us vulnerable to the issue noted in the CVE?
Thanks!
I'm having trouble setting the DateTimePicker to use the European style calendar (where weeks start on Monday) and a 24-hour time picker. Despite my attempts, I haven't been successful in achieving this configuration. I'm seeking guidance or a solution to implement this specific style for the DateTimePicker.
I have a listview that a user can click a button on and go to a new page. I pass the current page and the id of the selected item to the new page. When the user clicks on a link to return to the page with the listview, the page and the id are passed back. I can change the page to the correct page and select the record in the dataBound event as shown below but, I have not been able to figure out how to scroll it into view. Is there a way to do that?
function dataBound(e){
var listViewDS = $("#lvDisplay").data("kendoListView").dataSource;
var myPage = '@ViewBag.CurrentPage';
var myId = '@ViewBag.CurrentId';
if (myPage != 1){
setTimeout(() => { listViewDS.page(myPage); }, 1000);
var listView = $("#lvDisplay").data("kendoListView");
var dataItems = listView.dataSource.view();
var index = 0;
for (var j = 0; j < dataItems.length; j++) {
if (dataItems[j].Id == myId) {
index = j;
listView.select(index);
var row = e.sender.element.find("[data-uid='" + dataItems[j].uid + "']");
row.addClass("k-state-selected");
};
};
}
}
I have tried the code below but always get an error for top.
$("#lvDisplay").scrollTop($("#lvDisplay").find(".k-state-selected").position().top);
Good morning, I have the problem you see in the two images above, Is there anyone with the same problem who maybe solved it?
The problem appeared after updating from version 2022.2.802 to version 2023.2.829.
The two steppers are configured as follows:
@(Html.Kendo().Stepper() .Name("stepper") .Linear(false) .Orientation(StepperOrientationType.Horizontal) .Steps(s => { for (int i = 0; i < (Model.ClaimStatusFlows.Count()); i++) { if (Model.Claim.ZQwaFlowStatus == Model.ClaimStatusFlows[i].IdQda) { selected = true; enabled = true; } else { selected = false; enabled = false; } s.Add().Label(Model.ClaimStatusFlows[i].Code).Selected(selected).Enabled(enabled); } })) @(Html.Kendo().Stepper() .Name("act_status") .Indicator(false) .Orientation(StepperOrientationType.Horizontal) .Steps(s => { for (int i = 0; i < Model.ListActionStatus.Count(); i++) { if (Model.actions_status == Model.ListActionStatus[i].StatusValue) { s.Add().Label(Localizer[Model.ListActionStatus[i].StatusName].Value.ToString()).Selected(true).Enabled(true); } else { s.Add().Label(Localizer[Model.ListActionStatus[i].StatusName].Value.ToString()).Enabled(false); } } }) )
and as additional css there are these two things:
.k-step-text { max-width: 150% !important; } .k-step-label { max-width: 150% !important; }
Hello,
I have the following grid implementation:
<kendo-grid name="grid">
<datasource type="DataSourceTagHelperType.Ajax" auto-sync="false" server-filtering="true" server-sorting="true" page-size="10">
<transport>
<read url="@Url.Action("ReadItemList", "Users")" />
</transport>
<schema>
<model id="Id">
<fields>
<field name="UserName" type="string"><validation required="true"></validation></field>
</fields>
</model>
</schema>
</datasource>
<groupable enabled="true" />
<editable mode="inline" />
<filterable enabled="true" />
<sortable enabled="true" />
<pageable button-count="5" refresh="true" page-sizes="new int[] { 5, 10, 20, 50, 100, 1000 }" />
<columns>
<column field="UserName" title="User name"></column>
</columns>
</kendo-grid>
My problem that the message shown is "UserName" is required", not "User name is required".
@(Html.Kendo().TreeList<MyModel>()
.Name("GridBuildInfo")
.Toolbar(toolbar =>
{
toolbar.Search();
})
.Columns(columns =>
{
columns.Add().Selectable(true).Width("35px");
columns.Add().Field(p => p.ComponentItemId).Title("Item Id").Width(300);
columns.Add().Field(p => p.ComponentItemDescriptionFriendly).Title("Item Description");
columns.Add().Field(p => p.ComponentSerialNumber).Title("Serial #");
})
.Resizable(true)
.Height(540)
.Filterable()
.DataSource(dataSource => dataSource
.ServerOperation(false)
.Sort(s => s.Add(a => a.HasFieldServiceableChildItems).Descending())
.Read(read => read.Url("/GetData/TestTree"))
.Model(m =>
{
m.Id(f => f.NodeNumber);
m.ParentId(f => f.ParentNodeNumber);
m.Field(f => f.HasChildItems);
//want to expand only the first row.
m.Expanded(f => f.ParentNodeNumber == null ? true : false);
})
).Events(events =>
{
events.Expand("onExpand");
})
)
<script>
function onExpand(arg) {
console.log(arg);
}
</script>
I've searched and found a variety of answers regarding binding to dynamic data. The closest I've come is using a DataTable but I can't format the data specifically using it (i.e. currency, date). Basically we want to allow our users to see their 'User Defined FIelds' in the grid, in addition to the regular items we have in a grid. I planned on converting all columns (user defined and our standard columns we have for all customers) into one column object:
public class GenericGridListItemViewModel
{
public string Name { get; set; } = null!;
public string? TextValue { get; set; }
public double? NumberValue { get; set; }
public DateTime? DateValue { get; set; }
public decimal? CurrencyValue { get; set; }
public bool Hidden { get; set; }
public UdfVariableTypes VariableType { get; set; }
}
And then in then I'd iterate through them an use the variable type for formatting the column and the hidden to define if it's hidden. The below example does not include all the possible variable types but it shows my attempt at getting something up and running. I get the correct headers on the grid but no rows are filled
The data is returned from the controller as a List<List<GenericGridListItemViewModel>>
If anyone has some insight I'd be thrilled to figure this out. Thanks, Brian.
@(
Html.Kendo().Grid <List<GenericGridListItemViewModel>>()
.Name("Grid")
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("Contacts_Read", "Contacts", new { area = "Contacts" }))
.PageSize(1000)
.ServerOperation(false)
)
.Columns(columns =>
{
int cdx = 0;
foreach(var col in Model.Data.First())
{
if (col.VariableType == UdfVariableTypes.Integer)
{
columns.Bound(l => l[cdx].NumberValue).Title(col.Name);
}
else if (col.VariableType == UdfVariableTypes.Text)
{
columns.Bound(l => l[cdx].TextValue).Title(col.Name);
}
else if (col.VariableType == UdfVariableTypes.Currency)
{
columns.Bound(l => l[cdx].NumberValue).Title(col.Name).Format("{0:C}").Hidden(Model.Data.First()[cdx].Hidden);
}
cdx++;
}
})
.Pageable()
.Sortable()
.Filterable()
.ColumnMenu()
.ToolBar(t =>
{
t.Excel();
t.Search();
})
.Reorderable(l => l.Columns(true))
)