有没有办法隐藏编辑弹出窗口中仍然可以在网格中看到的字段?
我尝试将其设置为隐藏: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 }
}
}
}
答案 0 :(得分:22)
类似的解决方案对我有用:
edit: function(e) {
e.container.find(".k-edit-label:first").hide();
e.container.find(".k-edit-field:first").hide();
},
答案 1 :(得分:15)
没有“hidden:true”这样的选项,这就是它被忽略的原因。您可以使用网格的edit事件来隐藏弹出窗口中的某些元素:
$("#grid").kendoGrid({
edit: function(e) {
e.container.find("input:first").hide();
}
});
答案 2 :(得分:12)
如果您使用的是ASP.NET MVC的Html.Kendo()。Grid<>(),您应该这样做:
将Edit事件处理程序添加到控件属性中的.Events,如下所示:
.Events(e => e.Edit("hideIdField"))
其中“hideIdField”是你的js事件处理函数。
在EventHandlers.js中,添加函数。
function hideIdField(e) {
$("#ProductID").hide();
$("label[for='ProductID']").hide();
}
其中ProductID是源模型中您的Id字段的名称。
答案 3 :(得分:12)
我喜欢the answer @jfl gives,将这个想法扩展到一个漂亮的,可重复使用的设置非常有用。
为什么呢?要跟踪您需要隐藏的列的序数是一种脆弱性。也就是说,@ jfl的回答 相反,您可以通过在列中放置属性来标准化隐藏列的方式。声明,然后在显示弹出窗口后调用的 我已经a full example at this fiddle了,但这里简要介绍一下: 我在列声明中添加了 然后,建立答案&前面提到的评论,我在我的 不再需要列序序跟踪。您可以添加列,更改订单,隐藏新订单,只需更改其上的edit
事件处理程序中检查它。您会在columns
事件中获得完整edit
声明的引用,因此我们可以获得很大的灵活性。hideMe
属性:columns: [
{ field: "name" },
{ field: "position" },
{
field: "age",
hideMe: true // <<< This is new.
},
{ command: "edit" }
],
edit
处理程序中有这个:e.sender.columns.forEach(function (element, index /*, array */) {
if (element.hideMe) {
e.container.find(".k-edit-label:eq(" + index + "), "
+ ".k-edit-field:eq( " + index + ")"
).hide();
}
});
hideMe
内容即可。 (回想起来,我可能应该称之为hideMeOnEdit
,但你明白了。)
答案 4 :(得分:5)
要隐藏字段,只需将其添加到视图模型中:
[ScaffoldColumn(false)]
public int Id { get; set; }
如果您想保留该字段并隐藏,请执行以下操作:
@(Html.Kendo().Grid<ViewModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(m => m.Id).Hidden()
columns.Bound(m => m.Name)
}))
答案 5 :(得分:3)
如果您正在使用ASP.NET MVC的UI,您可以使用以下方法,您不仅可以隐藏控件本身,还可以隐藏占用前端空间的FirstParent div。
添加事件处理程序
Html.Kendo().Grid<ProductDTO>()
.Name("GRVProducts")
.Columns(c =>
{
c.Bound(p => p.ProductID);
c.Bound(p => p.Name);
c.Bound(p => p.Price);
}
)
.Events(events=> events.Edit("HideGridFields"))
添加Javascript
<script type="text/javascript">
function HideGridFields(e)
{
HideControl("ProductID", e); //Hide ProductID control with Label and parent tag. No space occupied ;)
}
function HideControl(fieldName, e)
{
var cont = $(e.container);
HideFieldLabel(cont.find("label[for='"+fieldName+"']"));
HideFieldField(cont.find("#" +fieldName));
}
function HideFieldLabel(control)
{
control.parent(".editor-label").hide();
}
function HideFieldField(control) {
control.parent(".editor-field").hide();
}
</script>
使用Label和Parent标记隐藏ProductID控件。在前端没有占用空间;)
答案 6 :(得分:3)
类似的解决方案对我有用:
edit: function(e) {
e.container.find("label[for=yourFieldName]").parent("div .k-edit-label").hide();
e.container.find("label[for=yourFieldName]").parent().next("div .k-edit-field").hide();
},
答案 7 :(得分:3)
有字段PK _:
edit: function(e) {
e.container.find("input[name='PK_']").hide();
e.container.find("label[for='PK_']").hide();
}
答案 8 :(得分:1)
创建一个这样的函数:
function noEditor(container, options) {
container.prevObject.find("div[data-container-for='" + options.field + "']").hide();
container.prevObject.find("label[for='" + options.field + "']").parent().hide();
}
然后在您的字段中,按如下方式设置编辑器属性:
columns: [
{ field: "Field1", title: "Field 1", editor: noEditor },
{ field: "Field2", title: "Field 2" },
{ field: "Field3", title: "Field 3" },
{ field: "Field4", title: "Field 4", editor: noEditor }
这样,您可以轻松地在弹出编辑器中隐藏更多的一个字段。在这种情况下,Field1,Field2,Field3和Field4将显示在网格中,但Field1和Field4将不会显示在弹出编辑器中。
答案 9 :(得分:1)
不要忘记在模型上使用数据注释的选项:
[HiddenInput(DisplayValue = false)]
(如果您的模型基于ASP.NET MVC)
答案 10 :(得分:0)
扩展由ruffin给出的Typescript 1.x的答案
在网格编辑事件中:
, edit: function (e) {
e.sender.columns.forEach((element, index) => {
var ele: any = element;
if (ele.attributes != undefined) {
if (ele.attributes.hideMe) {
e.container.find(".k-edit-label:eq(" + index + "), "
+ ".k-edit-field:eq( " + index + ")"
).hide();
}
}
});
}
并在列中添加hideMe元素作为属性:
columns: [
{
field: "Id",
title: "", width: 1,
attributes: { hideMe: true }
},
...
这是必要的,因为typescript报告为未声明的一个列字段的错误。
答案 11 :(得分:0)
作为使用ruffin给出的答案中显示的循环索引的替代方法,还可以通过搜索与迭代列的字段匹配的for
属性来获取列的相应标签索引。 Kendo的默认模板自动生成
所有编辑器标签的for
属性。
var labels = e.container.find('.k-edit-label');
e.sender.columns.forEach(function (element) {
if (element.hideMe) {
var index = labels.find('label[for="' + element.field + '"]').parent().index();
if (index !== 0) //Prevent a potential zero division
index = index / 2;
e.container.find(".k-edit-label:eq(" + index + "), " + ".k-edit-field:eq( " + index + ")").hide();
}
});
答案 12 :(得分:0)
答案在这里: Kendo-ui MVC PopUp editor: How to hide fields 和这里: http://www.telerik.com/forums/editing-grid-via-popup-mode-hide-fields
答案 13 :(得分:0)
像这样在数据模型类“[ScaffoldColumn(false)]”中设置
公开课学生数据 {
[ScaffoldColumn(false)]
public int Id { get; set; }
public string Name { get; set; }
}
这将在弹出窗口中隐藏一个 id。 这是用于 ASP.NET MVC 的 UI