我们的Kendo Grid DataSource看起来像这样:
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Events(events => events.Error("error_handler"))
.Model(model =>
{
model.Id(m => m.MilestoneId);
model.Field(m => m.ProjectName).Editable(false);
model.Field(m => m.Name).Editable(false);
model.Field(m => m.Status).Editable(??????);
})
对于最后一个字段(Status
),我们需要为Editable
提供一个bool值。但是,我希望这个值来自我们模型上的属性值。该模型有一个名为IsAvailable
的属性,我希望bool成为该值。
基本上,如果模型中IsAvailable
为真,我们只希望状态列可以编辑。
该属性的模型上的C#代码是:
public bool IsAvailable{ get; set; }
有没有人知道访问此值的正确语法?
我试过了:
model.Field(m => m.Status).Editable((model.Field(m => m.IsAvailable).ToString()).AsBool());
编译但不起作用;对于所有情况,它总是返回false。
答案 0 :(得分:6)
使用Timothy Walter's link,我通过使用他建议的编辑事件找到了问题的解决方案。
这是我的代码最终看起来像:
.Events(events =>
{
events.Edit("edit_handler");
})
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.Events(events => events.Error("error_handler"))
.Model(model =>
{
model.Id(m => m.MilestoneId);
model.Field(m => m.ProjectName).Editable(false);
model.Field(m => m.Name).Editable(false);
model.Field(m => m.Status).Editable(true);
})
和Javascript是:
<script type="text/javascript" language="javascript">
function edit_handler(e) {
if (!e.model.isNew()) {
var statusDropDown = e.container.find("input[name=Status]").data("kendoDropDownList");
if (!e.model.IsAvailable) {
statusDropDown.enable(false);
}
}
</script>
答案 1 :(得分:2)
默认情况下,可以更轻松地启用此字段的编辑,并根据需要附加到“编辑”事件并根据当前行的数据禁用编辑字段。
有关示例,请查看edit event on the grid的文档。