0

ドロップダウンリスト(jqxgridセル内)をデータベースにバインドしようとしていますが、ドロップダウンリストの変更イベント(および同時に行更新機能)が複数回動作すると、グリッドがロックされます。ドロップダウンリストは、データフィールド「UrunAdi」を持つ列にバインドされています。そして、これは asp .net mvc3 プロジェクトです。何かアドバイス?

コードは次のとおりです。

var gridSource = {
            datatype: "json",
            datafields: [{ name: 'KargoId' }, { name: 'Ad' }, { name: 'Soyad' }, { name: 'UrunAdi' }, { name: 'UrunId', type: 'int' }, { name: 'Uygunluk', type: 'boolean' },
                         { name: 'YuklenmeTarihi', type: 'date' }, { name: 'Adet' }, { name: 'Fiyat'}],
            url: 'BindGrid',
            updaterow: function (rowid, rowdata) {                    
                var data = $.param(rowdata);
                //alert(data);
                $.ajax({
                    dataType: 'json',
                    url: 'UpdateEditGrid',
                    data: data,
                    success: function (data, status, xhr) {
                        // update command is executed.
                    }
                });
            }
        };

        var gridDataAdapter = new $.jqx.dataAdapter(gridSource, {
            downloadComplete: function (data, status, xhr) { },
            loadComplete: function (data) { $("#jqxgrid").jqxGrid('hidecolumn', 'UrunId'); },
            loadError: function (xhr, status, error) { alert(JSON.stringify(xhr)); }
        });

        var dropdownSource = {
            datatype: "json",
            datafields: [{ name: 'UrunId' }, { name: 'UrunAdi'}],
            url: 'BindDropdown'
        };

        var dropdownListAdapter = new $.jqx.dataAdapter(dropdownSource, { autoBind: true, async: false });

        // initialize jqxGrid
        $("#jqxgrid").jqxGrid(
        {
            width: 670,
            source: gridDataAdapter,
            editable: true,
            theme: theme,
            selectionmode: 'singlecell',
            columns: [
              { text: '#', datafield: 'KargoId', width: 40 },
              { text: 'Ad', columntype: 'textbox', datafield: 'Ad', width: 90 },
              { text: 'Soyad', datafield: 'Soyad', columntype: 'textbox', width: 90 },
              { text: 'Urun', columntype: 'dropdownlist', datafield: 'UrunAdi', width: 177,
                  initeditor: function (row, cellvalue, editor) {
                      var urunId = $('#jqxgrid').jqxGrid('getcellvalue', row, "UrunId");
                      editor.jqxDropDownList({ displayMember: 'UrunAdi', source: dropdownListAdapter, selectedIndex: urunId });
                      editor.bind('change', function (event) {
                          var selectedUrunId = editor.jqxDropDownList('getSelectedIndex');
                          $('#jqxgrid').jqxGrid('setcellvalue', row, "UrunId", selectedUrunId);
                      });
                  }
              },
              { text: 'UrunId', datafield: 'UrunId' },...
4

1 に答える 1

1

UrunAdiの列定義(ドロップダウンリスト列)を次のように変更します。

 { text: 'Urun', columntype: 'dropdownlist', datafield: 'UrunAdi', width: 177,
                  initeditor: function (row, cellvalue, editor) {
                      var urunId = $('#jqxgrid').jqxGrid('getcellvalue', row, "UrunId");
                      editor.jqxDropDownList({ displayMember: 'UrunAdi', source: dropdownListAdapter, selectedIndex: urunId });
                      editor.bind('change', function (event) {
                          selectedUrunId = editor.jqxDropDownList('getSelectedIndex');
                      });
                  }
              }

唯一の違い:

削除する$('#jqxgrid').jqxGrid('setcellvalue', row, "UrunId", selectedUrunId);と、「setcellvalue」イベントがupdaterowをトリガーすると思います。

于 2012-07-11T15:11:29.287 に答える