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。您能帮助我创建此链接吗?谢谢你的详细解释。