2013-07-09 44 views
13

命令我已经开发使用剑道的UI工具一个Web应用程序,那里有与批量编辑模式剑道格..剑道电网删除不工作

但是当我按下删除键在剑道任何记录电网将在网格中的列表中删除,但实际上并不在source.when我重新加载页面或网格删除的项目仍然会存在数据..

这里是我网格的代码

<div id="grid"> 
     </div> 
     <script type="text/javascript"> 

      $("#submitMarketUser").click(function() { 
       var grid = $("#grid").data("kendoGrid"); 
       var dataSource = new kendo.data.DataSource({ 
        transport: { 
         read: { 
          url: "WholeSaleTrade/GetTradeProductDetail", 
          dataType: "json", 
          data: { 
           test: $("#Names").val() 
          } 
         }, 
         destroy: { 
          url: "WholeSaleTrade/DeletePro", 
          type: "POST", 
          dataType: "jsonp", 
          data: { 
           DAKy: $("#Names").val(), 
           DIKy: $("#btntxt").val() 
          } 
         }, 
         create: { 
          url: "WholeSaleTrade/CreateProduct", 
          type: "POST", 
          dataType: "jsonp", 
          data: { 
           AKy: $("#Names").val(), 
           IKy: $("#btntxt").val() 
          } 
         } 
        }, 
        pageSize: 5, 
        schema: { 
         model: { 
          id: "ProductKey", 
          fields: { 
           ProductKey: { editable: false, nullable: true }, 
           ProductName: { validation: { required: true} } 
          } 
         } 
        } 
       }); 
       $("#grid").kendoGrid({ 
        dataSource: dataSource, 
        editable: true, 
        toolbar: ["create", "save"], 
        autobind: true, 
        pageable: true, 
        columns: [ 
         { field: "ProductName", title: "Product Name", 
          editor: function (container, options) { 
           var model = options.model; 
           $('<input id="btntxt" name="' + options.field + '"/>').appendTo(container).kendoComboBox({ 
            dataSource: { 
             type: "POST", 
             transport: { 
              read: { 
               url: "MarketInformation/PopulateProducts", 
               success: function (data) { 
                var prod = data[0]; 
                model.set("ProductName", prod.ItmNm); 
                model.set("ItmKy", prod.ItmKy); 
                model.set("UserKey", $("#Names").val()); 
               } 
              } 
             } 
            }, 

            dataValueField: "ItmKy", 
            dataTextField: "ItmNm" 
           }); 
          } 
         }, 
         { command: ["destroy"], title: "&nbsp;" } 
        ] 
       }); 
      }); 

     </script> 

无法识别故障发生在哪里,有人可以帮我解决这个问题。

+0

您是否检查浏览器控制台是否有错误? – OnaBai

+0

你是什么意思? – sanzy

+0

你使用Firebug或类似的吗?它执行您的JavaScript时显示任何错误。我试过你的代码,它的工作原理,但我做了一些修改,因为我没有你所有的项目。 – OnaBai

回答

32

有三种常见的原因删除将无法正常工作:


没有电网editable设置为inlinepopup。删除的项目将通过传输销毁自动处理,仅用于“内联”/“弹出”编辑模式。例如:

editable: { 
    mode: "inline", 
} 
//or 
editable: "inline" 


2.如果您数据源,你有batch标志设置为true,这意味着数据源将拨打电话只有你告诉它,例如调用后sync()。例如:

var dataSource = new kendo.data.DataSource({ 
    batch: true, 
    //..... 
}); 
//... in some where e.g in a save button click event call the following line: 
dataSource.sync(); 


应该定义id里面model数据源你的数据库字段名的主键。例如:

model: { 
     id: "ProductID", 
     fields: { 
      ProductID: { editable: false, nullable: true }, 
     } 
    } 


所以你的代码的问题是第一位的,即你没有设置editableinlinepopup

0

嗯试试不包括type: "POST",,看看它现在是否可以工作,因为据我所知,该位未包含在演示中,我不认为当我上次进行内联编辑/删除时,我已将它包含在内。

0

我已经把一个任意波形名称为服务器删除方法在一个int。

[HttpPost] 
    public ActionResult DeleteRandomTest(Int32 randomTestId) 
    { 
     ... 
    } 

默认ModelBinder的可能是寻找一个叫做ID(根据模型的配置相同,我喜欢的类型的主键)属性。

.Model(config => config.Id(p => p.Id)) 

事实上,我证明了这一点,通过改变签名如下:后

[HttpPost] 
    public ActionResult DeleteRandomTest(Int32 Id) 
    { 
     ... 
    } 

我的破发点被击中。

最终,我使用了完整的类型作为Kendo示例中显示的参数,因为我不想在动作中使用命名不严的参数名称(不是驼峰大小写)。如下所示:

[HttpPost] 
    public ActionResult DeleteRandomTest([DataSourceRequest] 
     DataSourceRequest request, RandomDrugTest randomDrugTest) 
    { 
     ... 
    } 

这似乎是它没有工作的原因。

0

我有同样的问题。我的问题是由kendo模型中的data属性造成的。例如:

{id: 1, data: ""} 
2

如果您选择不包括editable.mode为了利用单元格编辑,你可以设置网格的toolbar包括期权save

$("#grid").kendoGrid({ 
    dataSource: { 
     transport: { 
      .... 
     }, 
     schema: { 
      .... 
     } 
    },       
    toolbar: ["create", "save", "cancel"], 
    columns: [ 
     .... 
    ], 
    editable: true 
}); 

这将创建网格工具栏上的一个save按钮。通过单击destroy命令按钮删除任何记录后,单击save按钮以使网格对服务器进行Ajax调用以删除记录。

如果你宁愿自动删除记录,而不包括save按钮,你可以一个change事件处理程序添加到网格的datasource

$("#grid").kendoGrid({ 
    dataSource: { 
     transport: { 
      .... 
     }, 
     schema: { 
      .... 
     }, 
     change: function(e) { 
      if (e.action === "remove") { 
       this.sync(); 
      } 
     } 
    },       
    columns: [ 
     .... 
    ], 
    editable: true 
}); 

这将自动同步你到电网所做的更改与数据更改时的服务器配合使用。