2012-04-17 7 views
0

私はjqGridを持っていて、新しい行を追加するときには1つの列にデフォルト値があるはずです。私はドキュメンテーションに従ってきましたが、その価値は決して現れません。jqGridのデフォルト値は機能しませんか?

これはcolModelから列です:

{name: 'Lt', index: 'Lt', width: 25, editable: true, editoptions: {defaultValue: 'N'}} 

そして、これは私がaddRowDataを呼び出す方法です:

$("#grid").addRowData(-1, 
    { Datum: $.datepicker.formatDate("yy-mm-dd", new Date()) }, "first", true) 

私の知る限り見ることができるように、私は本を読んで、それをやっています!

コンプリートグリッドDEF:

$("#dagbok_grid").jqGrid({ 
     datatype: 'json', 
     mtype: 'GET', 
     colNames: [ 
      'a', 
      'b', 
      'c', 
      'd', 
      'e', 
      'f', 
      'g', 
      'h', 
      'i', 
      'j', 
      'k', 
      'l', 
      'm', 
      'n', 
      'o', 
      'p', 
      'q', 
      'r', 
      's'], 
     colModel: [ 
      { name: 'a', index: 'a', width: 30, formatter: 'checkbox', edittype: 'checkbox', editable: true }, 
      { name: 'b', index: 'b', width: 30, formatter: 'checkbox', edittype: 'checkbox', editable: true }, 
      { name: 'c', index: 'c', width: 70, formatter: 'date', editable: true, editrules: { required: true }, editoptions: { dataInit: function (elem) { $(elem).datepicker(); } } }, 
      { name: 'd', index: 'd', width: 65, editable: true, formatter: 'date', formatoptions: { srcformat: 'H:i:s', newformat: 'ShortTime' }, editrules: { time: true} }, 
      { name: 'e', index: 'e', width: 80, edittype: 'select', editable: true, formatter: 'select' }, 
      { name: 'f', index: 'f', width: 100, editable: true, edittype: 'textarea', editoptions: {rows: '7'} }, 
      { name: 'g', index: 'g', width: 80, editable: true, edittype: 'textarea', editoptions: { rows: '7'} }, 
      { name: 'h', index: 'h', width: 80, editable: true, editrules: { maxValue: 50} }, 
      { name: 'i', index: 'i', width: 120, edittype: 'select', editable: true, formatter: 'select' }, 
      { name: 'j', index: 'j', width: 200, edittype: 'select', editable: true, formatter: 'select' }, 
      { name: 'k', index: 'k', width: 70, edittype: 'select', editable: true, formatter: 'select' }, 
      { name: 'l', index: 'l', width: 70, editable: true, editrules: { maxValue: 10} }, 
      { name: 'm', index: 'm', width: 25, editable: true, editoptions: { defaultValue: 'N'} }, 
      { name: 'n', index: 'n', width: 70, editable: true, editrules: { integer: true, maxValue: 999999 }, formatter: formatPosition, unformat: unformatPosition }, 
      { name: 'o', index: 'o', width: 25, editable: true, editrules: { custom: true, custom_func: chkLongitudTecken} }, 
      { name: 'p', index: 'p', width: 80, editable: true, editrules: { integer: true, maxValue: 999999 }, formatter: formatPosition, unformat: unformatPosition }, 
      { name: 'q', index: 'q', width: 80, edittype: 'select', editable: true, formatter: 'select' }, 
      { name: 'r', index: 'r', width: 100, editable: true, editrules: { maxValue: 50} }, 
      { name: 's', index: 's', width: 65, edittype: 'select', editable: true, formatter: 'select' }, 
     ], 
     sortname: 'c', 
     sortorder: 'desc', 
     shrinkToFit: false, 
     viewrecords: true, 
     gridview: true, 
     onSelectRow: function (id) { 
      if (id && id !== lastsel) { 
       jQuery('#dagbok_grid').saveRow(lastsel); 
       lastsel = id; 
      } 
      jQuery('#dagbok_grid').editRow(id, true); 
     }, 
     height: 400, 
     editurl: '@Url.Action("SaveGridRow")', 
     caption: 'my grid' 
    }); 

私も後にいくつかのcolsに選択値を追加します。

$.ajax({ 
     type: 'GET', 
     url: '@Url.Action("GetGridComboValues")', 
     async: false, 
     success: function (data) { 
      var grid = $("#dagbok_grid"); 
      grid.setColProp("e", { editoptions: { value: data.kallor} }); 
      grid.setColProp("i", { editoptions: { value: data.rubriker} }); 
      grid.setColProp("j", { editoptions: { value: data.verksamheter} }); 
      grid.setColProp("k", { editoptions: { value: data.opPadrag, dataEvents: [{ type: 'change', fn: function (e) { 
       $.ajax({ 
        type: "GET", 
        url: '@Url.Action("GetVerksamhetskod")', 
        data: { "opPadragId": e.currentTarget.value }, 
        dataType: 'json', 
        success: function (data) { 
         var selr = jQuery('#dagbok_grid').jqGrid('getGridParam', 'selrow'); 
         jQuery("#dagbok_grid").jqGrid('setCell', selr, "l", data); 
        } 
       }); 
      } 
      }] 
      } 
      }); 
      grid.setColProp("q", { editoptions: { value: data.medier} }); 
      grid.setColProp("s", { editoptions: { value: data.regioner} }); 
     } 
    }); 

追加と削除コード

$("#toolbarAddButton") 
     .button() 
     .click(function() { 
      $("#dagbok_grid").addRowData(-1, { Datum: $.datepicker.formatDate("yy-mm-dd", new Date()) }, "first", true) 
     }); 

    $("#toolbarDeleteButton").click(function() { 
     var radid = $("#dagbok_grid").jqGrid("getGridParam", "selrow"); 
     if (radid != null) { 
      var su = $("#dagbok_grid").jqGrid("delRowData", radid); 
      $("#dagbok_grid").jqGrid("delGridRow", radid, { url: '@Url.Action("DeleteGridRow")', reloadaftersubmit: false }); 

     } 
    }) 

ユーザーの保存が実行されます編集モード中に入力してください。

答えて

2

まず、editoptions: { defaultValue: 'N'}を定義しました。 editoptions

オプションは文字列または関数にすることができます。このオプションはの フォーム編集モジュールと、追加モードでeditGridRowメソッドを併用した場合にのみ有効です。 が定義されている場合、入力要素は が空の場合のみこの値で設定されます。選択項目で使用する場合は、キーではなくテキストを入力する必要があります。 関数が使用されている場合、関数はvalueを返す必要があります。

デフォルト値はの間に設定されます。グリッドボディには編集中ではなく塗りつぶします。この目的のためには、フォーマッタオプションのあるdefaulValueが存在しますが、あらかじめ定義されたフォーマッタでのみ使用されます(the documentation参照)。

custom formatterのいずれかを使用して解決するか、またはaddRowDataメソッドを直接使用する場合は、Lt列の値を明示的に追加して問題を解決できます。

低レベルメソッドaddRowDataを使用することはお勧めできませんが、これは遅く、主に間違った方法で使用されます。たとえば、-1をROWIDとして使用しました。同じステートメントを一度に実行すると、重複したIDを持つエラーが発生し、非常に奇妙な結果が発生する可能性があります。そのjqGridでユニークなID自体を生成する場合は、undefinedをROWIDパラメータとして使用する必要があります。

+0

ありがとうございます! addRowData以外の行を追加するにはどのような方法をお勧めしますか? -1の目的は、サーバーサイドに新しく追加された行であることを知っていることです。私は代わりにそのためにいくつかのフラグを使用することができるかもしれません。 新しい行を追加するときにデフォルト値が必要です。既存の行を入力するのではなく、デフォルト値が必要です。 – kaze

+0

@kaze: 'addRowData'の使い方について最善の勧告を得るには、使用するグリッド(JavaScriptコード)とシナリオ**を追加する必要があります。ほとんどの 'data'パラメータは、' datatype: 'local''を使用する場合の最良の方法です。あなたが 'addRowData'を明示的に呼び出すと、デフォルト値を設定する問題を理解できません。なぜ単に 'add:' addRowData'によって追加された行のプロパティのリストに 'Lt: 'N''を追加しないのですか? – Oleg

+0

私はrowEditingとeditUrlを使用しています。保存するためにサーバーに更新を送信しています。私はまた、サーバー上の削除メソッドにIDを送信する削除を持っています。ユーザーがツールバーの「新規」ボタンを押すと、ユーザーが値を入力するために新しい行が一番上に挿入されるようにします。質問をacutalコードで更新します。 – kaze

関連する問題