0

フォーム編集を使用して jqGrid を使用しています。一部のフィールドを「編集」モードでは読み取り専用にして、「追加」モードでは読み取り専用にしないでください。これを解決するために他の場所で見つけたいくつかの提案を試しましたが(以下の例を参照)、それでも機能しません!

誰かが助けることができれば、私は最も感謝します!

以下のグリッドでは、「追加」モードではなく、「編集」モードで「LogonName」を読み取り専用に設定しようとしています。

$('#jpgCustomers').jqGrid({
     url: '@Url.Action("Customers")',
     datatype: 'json',
     mtype: 'POST',
     colNames: ['Name', 'FullName', 'Description'],
     colModel: [
                { name: 'LogonName', index: 'LogonName', align: 'left', width:80, editable:true, search:true, stype:'text',editrules:{required:true}},
                { name: 'FullName', index: 'FullName', align: 'left',width: 200, editable:true, search:true, stype:'text',editrules:{required:true}},
                { name: 'Description', index: 'Description', align: 'left', width: 300, editable:true, search:true, stype:'text'}
               ]

    //..

$("#jpgCustomers").jqGrid('navGrid', '#jpgpCustomers', 
        { add: true, del: true, edit: true, search: false},
        //edit form
        { width: '500', 
          editCaption: 'Edit Customer',
          url: '@Url.Action("EditCustomer")', 
          reloadAfterSubmit: true, 
          closeAfterEdit: true,
          //always start from a new form
          recreateForm: true,
          beforeShowForm: function(form) {
                  //center the edit dialog on screen
                  var dlgDiv = $("#editmod" + jpgCustomers.id);
                  CenterDialog(dlgDiv);
                  $("#jpgCustomers").jqGrid('setColProp','LogonName',{editoptions: {readonly:'readonly'}});
              }
        },
        //Add form
        { width: '500', 
          addCaption: 'Add Customer',
          url: '@Url.Action("CreateCustomer")', 
          reloadAfterSubmit: true, 
          closeAfterEdit: true,
          beforeShowForm: function(form) {
                  var dlgDiv = $("#editmod" + jpgCustomers.id);
                  CenterDialog(dlgDiv);
                  $("#jpgCustomers").jqGrid('setColProp','LogonName',{editoptions: {readonly:false}});
           }
        },
        //Delete form
        { width: '250', 
          url: '@Url.Action("DeleteCustomer")',
          beforeShowForm: function(form) {
          //center the delete dialog on screen
          var dlgDiv = $("#delmod" + jpgCustomers.id);
          CenterDialog(dlgDiv);
          //change the Delete confirmation message
          var sel_id = $("#jpgCustomers").jqGrid('getGridParam','selrow')
          $("td.delmsg", form).html("Delete User <b>" + $("#jpgCustomers").jqGrid('getCell', sel_id,'LogonName') + "</b>?");
        }
     }
 );
4

1 に答える 1

0

OK、何時間ものテストと再テスト、そしてさまざまなことを試した後、私は解決策に出くわしました!

上記のコードにいくつかの変更を加えましたが、どれが問題に対する最も重要な答えであるかは完全にはわかりませんが、私がしたことは次のとおりです。

1)「SetColProp」への呼び出しを beforeShowForm からbeforeInitData関数に移動しました

2) beforeShowForm の前に beforeInitData を置きます - これは実際には違いがあるとは思いませんが、うまくいくのでそのままにしておきます!

3)フォームの追加セクションにrecreateForm :trueを含めました (編集セクションには既にありました)。

ポイント1と3が違いを生んだと思いますが、理由はわかりません!

The Question から変更された作業中の navGrid セクションを次に示します。

$("#jpgCustomers").jqGrid('navGrid', '#jpgpCustomers', 
    { add: true, del: true, edit: true, search: false},
    //edit form
    { width: '500', 
      editCaption: 'Edit Customer',
      url: '@Url.Action("EditCustomer")', 
      reloadAfterSubmit: true, 
      closeAfterEdit: true,
      //always start from a new form
      recreateForm: true,
      beforeInitData: function(form) {
          $("#jpgCustomers").jqGrid('setColProp','LogonName',{editoptions: {readonly:'readonly'}});
      },
      beforeShowForm: function(form) {
              //center the edit dialog on screen
              var dlgDiv = $("#editmod" + jpgCustomers.id);
              CenterDialog(dlgDiv);
      }
    },
    //Add form
    { width: '500', 
      addCaption: 'Add Customer',
      url: '@Url.Action("CreateCustomer")', 
      reloadAfterSubmit: true, 
      closeAfterEdit: true,
      recreateForm: true,
      beforeInitData: function(form) {
           $("#jpgCustomers").jqGrid('setColProp','LogonName',{editoptions: {readonly:false}});
      },
      beforeShowForm: function(form) {
           var dlgDiv = $("#editmod" + jpgCustomers.id);
           CenterDialog(dlgDiv);
      }
    },
    //Delete form
    { width: '250', 
      url: '@Url.Action("DeleteCustomer")',
      beforeShowForm: function(form) {
      //center the delete dialog on screen
      var dlgDiv = $("#delmod" + jpgCustomers.id);
      CenterDialog(dlgDiv);
      //change the Delete confirmation message
      var sel_id = $("#jpgCustomers").jqGrid('getGridParam','selrow')
      $("td.delmsg", form).html("Delete User <b>" + $("#jpgCustomers").jqGrid('getCell', sel_id,'LogonName') + "</b>?");
    }
 }

);

于 2012-12-12T17:17:04.773 に答える