2013-07-09 2 views
13

を働いていないコマンドを削除します。..剣道グリッド私は</strong><strong>剣道UIツールを使用してWebアプリケーションを開発し、<strong>一括編集モード</strong>で剣道グリッドをtheresのいる

しかし、私は剣道のいずれかのレコードの削除ボタンを押してくださいグリッドには、グリッド内のリストから消去されますが、実際にはデータ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

3つの一般的な理由は削除ありますが動作しません。


1.inlineまたはpopupeditableのグリッドを設定しません。削除されたアイテムは、 "インライン"/"ポップアップ"編集モードの場合のみ、トランスポート破壊によって自動的に処理されます。例:あなたのデータソースに、あなたはtrueに設定batch旗を持っている場合は

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


2.が、これはデータソースを使用すると、呼び出し例えば、それを伝えた後のみを電話をかけることを意味します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.あなたはmodelデータソース内部データベースのフィールド名のプライマリキーにidを定義する必要があります。例:

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


だからあなたのコードに問題が最初のものであるが、私は、サーバーメソッドの削除にint型のためarbitray名前を入れていた inlineまたは popup

0

Hmm type: "POST",を含めないようにしてください。これまでのところ、デモの部分にビットが含まれていないことがわかっていて、最後にインライン編集/削除を行ったときは含めませんでした。

0

editableを設定しなかったすなわち。

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

デフォルトmodelbinderは、おそらくID(モデルの構成に応じて私のタイプの主キーと同じ)と呼ばれるプロパティを探していました。

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

は実際に、私は次のように署名を変更することで、これを証明した:

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

私のブレークポイントは、後に見舞われました。剣道の例のように、私はアクションで悪いという名前のパラメータ名(ないキャメルケース)を持っていたくなかったので、

は最終的に、私は、パラメータとして、完全なタイプを使用しました。次のように表示されます。

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

これは動作していなかったようです。

0

私は同じ問題がありました。私の問題は、剣道のモデルにdataというプロパティがあることが原因でした。例:

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

これが作成されます:あなたはセル内編集を利用するためにeditable.modeを含めるしないことを選択した場合、あなたはオプションsaveを含めるために、グリッドのtoolbarを設定することができ

{id: 1, data: ""} 
2

グリッドのツールバーにあるsaveボタンをクリックします。 destroyコマンドボタンをクリックしてレコードを削除したら、saveボタンをクリックして、レコードを削除するためのグリッドにサーバーへのAjax呼び出しを行わせます。

あなたはむしろsaveボタンを含めずに、自動的にレコードを削除したい場合、あなたはグリッドのdatasourcechangeイベントハンドラを追加することができます。

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

これは自動的にあなたがグリッドに加えられた変更を同期しますデータの変更があったときにサーバーと接続します。

関連する問題