假设我有这样的数据:
[
{ID: 1, SomeForeignKeyID: 4, IsFkEnabled: true},
{ID: 2, SomeForeignKeyID: 9, IsFkEnabled: false}
]
Run Code Online (Sandbox Code Playgroud)
Kendo Grid正在使用这些数据:
columns.Bound(m => m.ID);
columns.ForeignKey(p => p.SomeForeignKeyID, ViewBag.ForeignKeys as IEnumerable<object>, "Value", "Name");
Run Code Online (Sandbox Code Playgroud)
这是问题所在:如何使ForeignKey列可编辑,但只能在行中,IsFkEnabled == true?编辑模式是InCell.
Kendo UI没有附带本地化包.您只能选择仅设置数字和日期格式的文化文件,而不能选择小部件中显示的实际文本(例如:寻呼机文本 - 每页的项目数,下一页等,过滤器菜单(等于等),网格部分(在这里拖一列......)等)
要本地化小部件,必须在每个小部件的各个选项中传递一堆消息,以覆盖Kendo UI默认使用的消息.像这样的东西:
filterable: {
messages: {
info: "Título:", // sets the text on top of the filter menu
filter: "Filtrar", // sets the text for the "Filter" button
clear: "Limpar", // sets the text for the "Clear" button
// when filtering boolean numbers
isTrue: "é verdadeiro", // sets the text for "isTrue" radio button
isFalse: "é falso", // sets the text for "isFalse" radio button
//changes the text of the "And" and "Or" of the filter …Run Code Online (Sandbox Code Playgroud) 我使用的剑道UI窗口组件,它是类似于任何模态对话框.
我有一个关闭按钮,如何在单击该按钮时关闭窗口(而不是单击标题栏中的默认"x"按钮)
我的窗口中的内容是从另一个视图加载的
@(Html.Kendo().Window()
.Name("window")
.Title("Role")
.Content("loading...")
.LoadContentFrom("Create", "RolesPermissions", Model.Role)
.Modal(true)
.Width(550)
.Height(300)
.Draggable()
.Visible(false)
)
Run Code Online (Sandbox Code Playgroud)
在同一个观点中,我有
<span id="close" class="btn btn-inverse">Cancel</span>
Run Code Online (Sandbox Code Playgroud)
这是我在主视图中的内容(调用窗口的视图)
$(document).ready(function () {
var window = $("#window").data("kendoWindow");
$("#open").click(function (e) {
window.center();
window.open();
});
$("#close").click(function(e) {
window.close();
});
});
Run Code Online (Sandbox Code Playgroud) 我在用Kendo grid.
我想删除所有Kendo grid使用的行JavaScript.
我使用for循环删除它们但我想找到删除所有行的最佳方法.
最近,在使用AngularJS时,我非常喜欢许多功能,比如创建自定义抽象数据工厂等.
KendoUI也有类似MVVM,SPA路由等功能,AngularJS提供了这些功能,所以我很好奇混合两者的好处是什么(除了KendoUI的丰富UI功能之外)?
- 更新 -
我要问这个问题是为了澄清,对于那些可能会对每个问题的好处略有困惑的人,以及为什么人们会在一个项目中使用它们而不是一个在另一个项目中.
例如 - Javascript单元测试功能(简单地使用Angular控制器完成,但没有看到任何人使用KendoUI执行此操作).
似乎剑道正在努力做到这一切,但UI最好.
谢谢.
- 更新 -
由于写这个问题我曾经走过和集成KendoUI网格角使用OData的和已经写了一个教程这里在www.whatsinyourlunch.com如何做到这一点,在希望这将是有用的人.
该堆栈是通过通用存储库访问的AngularJS,KendoUI,OData,WebAPI2,.Net MVC5,C#,Entity Framework.
这是我的代码.它可以工作,如果你想遍历所有行.现在,QA告诉我,我必须支持过滤器.因此,当用户使用过滤器时,只有行的子集将显示在网格上.我只需要遍历那些行.
var entityGrid = $("#EntitesGrid").data("kendoGrid");
var data = entityGrid.dataSource.data();
var totalNumber = data.length;
for(var i = 0; i<totalNumber; i++) {
var currentDataItem = data[i];
VersionIdArray[i] = currentDataItem.VersionId;
}
Run Code Online (Sandbox Code Playgroud)
我试过了.
var data = entityGrid.dataSource.data().fetch();
Run Code Online (Sandbox Code Playgroud)
和
var data = entityGrid.dataSource.data().filter();
Run Code Online (Sandbox Code Playgroud)
无法让它运作.
有没有办法在通过ajax重新加载网格后触发事件?
我看到了RequestEnd事件.但这似乎发生在请求返回时,但在网格刷新之前.
我也看到了DataBound事件.但这比RequestEnd更早发生,
同样当我实现DataBound事件时,我的标题消失了..
我不得不诉诸这个黑客
function requestEnd(o) {
console.debug('request ended.', o);
setTimeout(refreshEditable, 500); // enough time to render the grid
}
function refreshEditable() {
// perform my actions on controls within grid content
}
Run Code Online (Sandbox Code Playgroud)
作为旁注..我很难找到可靠的kendo grid mvc API参考.当我谷歌为它,我得到这个:http: //docs.telerik.com/kendo-ui/getting-started/using-kendo-with/aspnet-mvc/migration/widgets/grid 这是一个很小的集合 - 和一些"事件",但那些不符合我在razor intelisense中看到的.
更新:添加数据绑定定义
$('#grid').kendoGrid({
dataBound: function(e) {
console.debug('data bound..');
}
});
Run Code Online (Sandbox Code Playgroud)
这里是网格ajax的定义
.Ajax().Read(read => read
.Action("FilesRead", "SomeController")
.Data("readData"))
function readData() {
return {
IncludeChildren: $("#IncludeChildren").is(':checked'),
SearchString: $('input[id=SearchString]').val()
};
}
Run Code Online (Sandbox Code Playgroud)
我可以看到在进行ajax调用时触发DataBound,而不是在它返回后触发.
更新
更正了DataBound事件挂钩. …
我只是想知道如何在JavaScript中更改网格中行的值,以便在网格和基础数据源中将其标记为"脏".
例如,我有一个联系人/客户列表.他们有3个字段FirstName/LastName/IsPrimaryContact.只能有1个主要联系人,因此当记录中的主要联系人设置为"真"时,我会使用JavaScript代码循环遍历数据源,并将设置为primary的所有其他联系人设置为false.
JavaScript全部触发正常并且数据字段设置正确但有两个问题:1.网格未更新我对数据源2进行的更改.更改的记录未标记为"脏",因此当我调用Datasource.sync()时没有同步
我可以通过手动设置记录上的脏字段来解决第二个问题,但这似乎不正确.感觉我应该在网格级别更新字段,以便在UI和数据源中处理它.
关于如何解决这个问题的任何想法?
谢谢
有没有办法隐藏编辑弹出窗口中仍然可以在网格中看到的字段?
我试过将它设置为隐藏:true,但是kendo似乎忽略了它.当editable设置为false时,它会隐藏文本框,但仍会显示字段标签.是否有可能摆脱标签和文本框?
我的数据源:
schema: {
total: "Total",
data: "Data",
model:{
id:"Id",
fields:{
Id:{ visible: false, editable:false },
Name:{ editable:true },
NumberOfUsers:{ hidden:true, editable:false }
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Kendo DatePicker来编辑我的ASP.NET MVC 4项目中的Kendo Grid中显示的Date字段.为了让DatePicker用于Date字段,请使用自定义日期格式字符串,我将Date.cshtml文件EditorTemplates夹下的文件更新为以下内容:
@(Html.Kendo().DatePickerFor(m => m).Format("dd/MM/yyyy"))
Run Code Online (Sandbox Code Playgroud)
通过这样做,我设法让DatePicker显示我想要的格式.但是,它无法通过手动键入或从弹出日历中选择输入的输入日期验证.
经过进一步调查,我可以说DatePicker正在根据M/d/Y格式验证日期.这个假设是基于我的建立而得出的,即12/1/2012是一个有效的日期,而13/1/2012则不是.
我也尝试添加.ParseFormat("dd/MM/yyyy")到DatePicker声明的末尾,Date.cshtml但它没有修复任何东西.所以我会说这肯定是一个错误,我稍后会向Telerik报告.
但就目前而言,我正在寻找一种解决方法来实现这一目标.我发现我可以kendo.ui.validator.rules.mvcdate在Javascript中覆盖以拥有自己的验证功能.虽然这在Chrome中运行良好,但在IE9中无效.
那么,任何想法如何让DatePicker接受dd/MM/yyyy输入格式?提前致谢.
kendo-ui ×10
javascript ×5
kendo-grid ×5
telerik ×2
angularjs ×1
asp.net-mvc ×1
c# ×1
data-binding ×1
jquery ×1
modal-dialog ×1
odata ×1
telerik-grid ×1