Model view controller 如何使剑道网格的特定列可编辑?
我使用以下代码编辑剑道网格中的字段:Model view controller 如何使剑道网格的特定列可编辑?,model-view-controller,kendo-ui,kendo-grid,Model View Controller,Kendo Ui,Kendo Grid,我使用以下代码编辑剑道网格中的字段: Html.Kendo().Grid(Model.lstResend) .Name("ResendFlowGride") .Columns( column => { column.
Html.Kendo().Grid(Model.lstResend)
.Name("ResendFlowGride")
.Columns(
column =>
{
column.Bound(e => e.FLOW_ID).Title("Id").Hidden(true);
column.Bound(e => e.GROUP_ID).Title("Group Id").Hidden(true);
column.Bound(e => e.GROUP_NAME).Title("Group Name");
column.Bound(e => e.ITEM_ID).Title("Item Id").Hidden(true);
column.Bound(e => e.ITEM_NAME).Title("Item Name");
column.Bound(e => e.ITEM_VALUE).Title("Item Value");
// column.Bound(e => e.ITEM_VALUE).Ed
}
)
.Editable(editable => editable.Mode(GridEditMode.InCell))
.DataSource(datasource => datasource.Ajax()
.Model(model =>
{
model.Id(p => p.ITEM_ID);
model.Field(p => p.ITEM_ID).Editable(false);
model.Field(p => p.GROUP_ID).Editable(false);
model.Field(p => p.GROUP_NAME).Editable(false);
model.Field(p => p.ITEM_NAME).Editable(false);
model.Field(p => p.ITEM_VALUE).Editable(true);
})
)
控制器代码:
public ActionResult SendResendFile(int Flow_Id, int RegID, int ResendId, string Condition, string GroupWhere)
{
RegistrationHeaderDetails RegHD = new RegistrationHeaderDetails();
string strMsg = string.Empty;
using (TransactionScope transaction = new TransactionScope())
{
try
{
_repository.Context.Database.ExecuteSqlCommand("exec PROC_SEND_RESEND_FILE {0},{1},{2},{3},{4},{5}", RegID, Flow_Id, Convert.ToInt32(Session["userid"]), ResendId, GroupWhere, Condition);
IEnumerable<ResendFlowDetail> IResendFlowDetail = _repository.Context.Database.SqlQuery<ResendFlowDetail>("PROC_GET_RESEND_FLOW @REG_ID = {0} ", RegID).ToList().AsQueryable();
RegHD.lstResendFlowDetail = IResendFlowDetail.ToList();
IEnumerable<ResendFlow> IResendFlow = _repository.Context.Database.SqlQuery<ResendFlow>("PROC_GET_DATA_RESEND_FILE @REGID = {0}, @FLOWID = {1} ", RegID, 0).ToList().AsQueryable();
RegHD.lstResend = IResendFlow.ToList();
IEnumerable<DataFlow> DataflowDetails = _repository.Context.Database.SqlQuery<DataFlow>("PROC_GET_FILES_DATAFLOW @RegistrationId = {0}", RegID).ToList().AsQueryable();
RegHD.DataFlow = DataflowDetails.ToList();
transaction.Complete();
if (Flow_Id == 1)
{
strMsg = "Flow D0055 Send Successfully";
}
else
{
strMsg = "File Send Successfully";
}
}
我正在编辑字段并通过单击创建文件的send flow按钮发送流
但无论我在编辑什么,它都不会反映到更新的数据中。我做错了什么
假设项目值为SP04,我正在将其更新为SP03。我正在单击发送流按钮。文件已创建,但使用SP04。读取您所做的操作。我建议如下:
Html.Kendo().Grid(Model.lstResend)
.Name("ResendFlowGride")
.Columns(
column =>
{
column.Bound(e => e.FLOW_ID).Title("Id").Hidden(true);
column.Bound(e => e.GROUP_ID).Title("Group Id").Hidden(true);
column.Bound(e => e.GROUP_NAME).Title("Group Name");
column.Bound(e => e.ITEM_ID).Title("Item Id").Hidden(true);
column.Bound(e => e.ITEM_NAME).Title("Item Name");
column.Bound(e => e.ITEM_VALUE).Title("Item Value");
// column.Bound(e => e.ITEM_VALUE).Ed
columns.Command(commands =>
{
commands.Edit();
commands.Destroy();
}).Width(200);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.InCell))
.DataSource(datasource => datasource
.Ajax()
.ServerOperation(false)
.Model(model =>
{
model.Id(p => p.ITEM_ID);
model.Field(p => p.ITEM_ID).Editable(false);
model.Field(p => p.GROUP_ID).Editable(false);
model.Field(p => p.GROUP_NAME).Editable(false);
model.Field(p => p.ITEM_NAME).Editable(false);
model.Field(p => p.ITEM_VALUE).Editable(true);
})
.Create(create => create.Action("//ControllerMethod", "//Controller"))
.Update(update => update.Action("//ControllerMethod", "//Controller"))
//.Read(read => read.Action("//ControllerMethod", "//Controller")) // If you wanted to read the data in here instead of passing it in above
.Destroy(destroy => destroy.Action("//ControllerMethod", "//Controller"))
)
}
这样做的目的如下:
Html.Kendo().Grid(Model.lstResend)
.Name("ResendFlowGride")
.Columns(
column =>
{
column.Bound(e => e.FLOW_ID).Title("Id").Hidden(true);
column.Bound(e => e.GROUP_ID).Title("Group Id").Hidden(true);
column.Bound(e => e.GROUP_NAME).Title("Group Name");
column.Bound(e => e.ITEM_ID).Title("Item Id").Hidden(true);
column.Bound(e => e.ITEM_NAME).Title("Item Name");
column.Bound(e => e.ITEM_VALUE).Title("Item Value");
// column.Bound(e => e.ITEM_VALUE).Ed
columns.Command(commands =>
{
commands.Edit();
commands.Destroy();
}).Width(200);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.InCell))
.DataSource(datasource => datasource
.Ajax()
.ServerOperation(false)
.Model(model =>
{
model.Id(p => p.ITEM_ID);
model.Field(p => p.ITEM_ID).Editable(false);
model.Field(p => p.GROUP_ID).Editable(false);
model.Field(p => p.GROUP_NAME).Editable(false);
model.Field(p => p.ITEM_NAME).Editable(false);
model.Field(p => p.ITEM_VALUE).Editable(true);
})
.Create(create => create.Action("//ControllerMethod", "//Controller"))
.Update(update => update.Action("//ControllerMethod", "//Controller"))
//.Read(read => read.Action("//ControllerMethod", "//Controller")) // If you wanted to read the data in here instead of passing it in above
.Destroy(destroy => destroy.Action("//ControllerMethod", "//Controller"))
)
}
这将向网格标题添加一个工具栏,允许您在表中创建新行。
允许您更新/删除行
允许您保存
控制器方法应如下所示:
创建:
public async Task<ActionResult> //MethodName ([DataSourceRequest] DataSourceRequest request, // gridmodel model)
{
bool result = false;
// You can check if the model state is valid
if (ModelState.IsValid)
{
// Do whatever
}
return Json(new[] { model}.ToDataSourceResult(request, ModelState), JsonRequestBehavior.AllowGet);
}
更新
public async Task<ActionResult> //MethodName([DataSourceRequest] DataSourceRequest request, // gridmodel model)
{
bool wasSuccess = false;
if (ModelState.IsValid)
{
// Do whatever
}
return Json(new[] { model }.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
删除
public async Task<ActionResult> //MethodName ([DataSourceRequest] DataSourceRequest request, //gridmodel model)
{
if (ModelState.IsValid && model!= null)
{
// Do whatever
}
return null;
}
当然,你也可以在这里退货
以上是剑道网格的MVC实现对不起,我想我不明白。要更新的按钮在哪里?我假设你的控制器方法,你得到了什么?@JamesS我第一次使用基诺。我应该在基诺中使用更新操作吗?如果你想更新所选行。我会考虑使用一个数据源更新操作,它将调用控制器方法。除此之外,您还可以添加/查找hwo以对列使用.Command函数。datasource.Ajax目前做什么?它去哪里了?@JamesS请看图片链接你能用按钮去哪里更新这个问题吗?我得到的TXN为空。。public ActionResult Update[DataSourceRequest]DataSourceRequest请求[BindPrefix=models]IEnumerable txns{}@chetankambli它不会是IEnumerable,因为我们在这里一次处理一行。这将只是ResendFlow txnsCan您能告诉我如何在剑道中显示来自控制器的错误消息吗?@chetankambli要显示来自控制器的错误消息,您可以向网格中添加一个事件,例如.Eventse=>e.error//name类似于gridName\u OnError,以遵循命名约定。在控制器方法中,您希望错误显示是否出现问题,请添加modelstate错误,例如modelstate.AddModelErrorupdateerrors,保存信息时出错,并在请求的响应中返回modelstate。您能帮助我创建此链接吗?谢谢你的详细解释。