如何使 Kendo 网格的特定列可编辑?
How to make specific column of the Kendo Grid editable?
我通过以下代码使 Kendo 网格中的字段可编辑:
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";
}
}
我正在编辑字段并通过单击创建文件的发送流按钮发送流。
但是无论我在编辑什么,它都没有反映到更新的数据中。我做错了什么?
假设项目值为 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"))
)
}
这会执行以下操作:
- 这会向网格 header 添加一个工具栏,允许您在 table 中创建新行。
- 允许您更新/删除一行
- 允许您保存
控制器方法应该如下:
创建:
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;
}
当然你也可以return这里的东西。
以上是 kendo 网格的 MVC 实现
我通过以下代码使 Kendo 网格中的字段可编辑:
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";
}
}
我正在编辑字段并通过单击创建文件的发送流按钮发送流。
但是无论我在编辑什么,它都没有反映到更新的数据中。我做错了什么?
假设项目值为 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"))
)
}
这会执行以下操作:
- 这会向网格 header 添加一个工具栏,允许您在 table 中创建新行。
- 允许您更新/删除一行
- 允许您保存
控制器方法应该如下:
创建:
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;
}
当然你也可以return这里的东西。
以上是 kendo 网格的 MVC 实现