2013-07-09 14 views
13

çalışmıyor silme komutu ama kendo herhangi bir kayıt için silme düğmesine bastığınızda Izgara resim bu alanda listeden silecektir ama aslında değil ben sayfa veya ızgara silinmiş öğe hala var olacaktır yeniden source.when verilere .. burada Kendo ızgara .. ben <strong>Kendo ui araçlarını</strong> kullanarak bir web uygulaması geliştirmiş ve <strong>toplu düzenleme modunda</strong> bir kendo ızgara gidecekseniz var</p> <p>

benim ızgaranın kodudur

<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> 

, arızanın nerede olduğunu belirleyemez ve birileri bu sorunu çözmeme yardımcı olabilir.

+0

Tarayıcı konsolunda herhangi bir hata olup olmadığını kontrol ettiniz mi? – OnaBai

+0

ne demek istiyorsun? – sanzy

+0

Firebug veya benzerlerini kullanıyor musunuz? Javascript'inizi çalıştırırken herhangi bir hata gösteriyor mu? Kodunu denedim ve işe yaradı ama elbette tüm projeni almadığım için bazı değişiklikler yaptım. – OnaBai

cevap

32

üç genel nedeni çalışmaz silmek vardır. Silinen öğeler, yalnızca "inline"/"popup" düzenleme modları için taşıma yoluyla otomatik olarak işlenecektir. Ör: sizin veri kaynağı üzerine, sen true ayarlı batch bayrak varsa

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


2., bu veri kaynağı aradığınız örn bunu söyledikten sonra sadece arama yapmak anlamına gelir sync(). Ör:

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(); 


3. Sen model ait veri kaynağı içindeki veritabanı alan adı birincil anahtarına id tanımlamalıdır. Ör:

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


Yani koduyla sorun ilki, sunucuda Yöntemi Sil üzerinde bir int için bir arbitray isim koymuştu editable

0

Hmm, type: "POST",'u dahil etmeyi denemeyin ve o bitin demoda yer almadığını görebildiğim kadarıyla şimdi çalışıp çalışmadığını kontrol edin ve satır içi düzenlemeler/silme işlemlerini son yaptığımda bunu eklemediğimi sanmıyorum.


1.inline veya popup için editable ızgaraait ayarlanmaması:

0

inline veya popup ayarlamadığınızı yani.

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

varsayılan ModelBinder muhtemelen Kimliği (modelin yapılandırmasına göre benim tip birincil anahtar olarak aynı) olarak adlandırılan bir özellik arıyordu.

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

Aslında, aşağıdaki imzayı değiştirerek bu kanıtladı:

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

Molam noktası bundan sonra vuruldu.

Nihayetinde, Kendo örneklerinde gösterildiği gibi tam türü kullandım çünkü eylemde zayıf adlandırılmış parametre adlarına (deve değil) sahip olmak istemedim. Aşağıdaki gibi gösterilmektedir: Çalışmıyor olmasının nedeni bu gibi görünmektedir.

0

Aynı sorunu yaşadım. Sorunum, kendo modelinde bir data özelliğine sahip olmasından kaynaklandı. Örnek:

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

Bu oluşturur:

{id: 1, data: ""} 
2

Eğer hücre içi düzenleme kullanmak amacıyla editable.mode dahil etmemeye seçerseniz, seçenek save içerecek şekilde ızgara toolbar ayarlayabilirsiniz Kılavuzun araç çubuğunda bir save düğmesi. destroy komut düğmesine tıklayarak herhangi bir kayıt silindikten sonra, kaydın silinmesi için sunucuya bir Ajax çağrısı yapması için save düğmesine tıklayın. Bunun yerine save düğmeye içermeden otomatik kaydı silmek istiyorsanız

, sen ızgara datasource bir change olay işleyicisi ekleyebilirsiniz:

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

Bu otomatik şebekeye yapılan değişiklikleri senkronize eder Bir veri değişimi olduğunda sunucu ile.