如何使 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 实现