2013-07-09 9 views
13

удалить я разработал веб-приложение с использованием кендо UI инструменты и Терезой кендо сетки с пакетным режимом редактирования ..кендо сетки команды не работает

, но когда я нажимаю кнопку удаления для любой записи в кендо сетка будет вычеркнуть из списка в сетке, но на самом деле не в данных 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

Есть три общие причины удаления не будет работать:


1. Не установка editable из сетки к inline или popup. Удаленные элементы будут автоматически обработаны посредством транспорта, уничтожающего только для режимов редактирования inline/popup. Пример:

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


3. Вы должны определить id к вашему первичному ключу имя поля базы данных внутри model из источника данных. Пример:

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


Таким образом, проблема с вашим кодом является первым один, то есть вы не установили editable в inline или popup

0

Хмм попробуйте не включать type: "POST", и посмотрим, работает ли он с тех пор, насколько я вижу, что бит не включен в демонстрационный файл, и я не думаю, что включил его, когда в последний раз редактировал/удалял встроенные изменения.

0

я поставил arbitray имя для междунар на сервере метод удаления.

[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

У меня была та же проблема. Моя проблема была вызвана наличием свойства data в модели кендо. Пример:

{id: 1, data: ""} 
2

Если вы решили не включать editable.mode для того, чтобы использовать редактирование в ячейке, вы можете установить toolbar сетки включить опцию save:

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

Это создаст a save кнопка на панели инструментов сетки. После удаления любых записей, нажав кнопку destroy, нажмите кнопку save, чтобы получить сетку, чтобы сделать вызов Ajax на сервер, чтобы удалить запись.

Если вы предпочитаете удалить запись автоматически, без включения кнопки save, вы можете добавить обработчик к change событий к datasource сетки:

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

Это будет автоматически синхронизировать изменения, внесенные в сетке с сервером при изменении данных.

Смежные вопросы