2013-07-09 105 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 
}); 

這將自動同步你到電網所做的更改與數據更改時的服務器配合使用。