1

私はjqGridを使用しており、バックエンドはasp.net-mvcです。バックエンドでプロパティを読み書きするために別の値を使用できるかどうかを調べたいと思います。

ここでの背景は、サーバー側の並べ替えが一般的であり、jqGrid で渡された列 Name を取得することで機能し、オブジェクトのコレクションのプロパティで並べ替えるように見えることです。これは、1つの状況を除いてうまく機能します

人のデータを表示するグリッドがあるとしましょう。サーバー上に Person オブジェクトのコレクションがあります。personName を示す列があるとします。

クライアント側の colModelで、colModel のName プロパティと Index プロパティを "PersonName" に設定しました。

サーバー側では、個人オブジェクトに PersonName プロパティがあるため、フィルター処理または並べ替えを行うと、C# リフレクションを使用してそのプロパティで並べ替えおよびフィルター処理を行います。

問題は、そのプロパティを編集したい場合、編集が Id が PersonId でテキストが PersonName の選択ドロップダウンである場合、保存時に Id を「PersonId」プロパティ (PersonName ではなく) として保存することです。財産)

私の現在の解決策(ハックだと感じます)は、グリッドに2つの列を配置することです。

以下に例を示します (要点を示すために簡略化しています)。

  { name: "PersonName", index: "PersonName", width: 78, editable: false },
  { name: "PersonId", index: "PersonId", width: 78, editable: true, hidden: true, editrules: { edithidden: true, required: true} },
  1. 表示され、並べ替えとフィルタリングに使用されますが、編集できない (名前とインデックスは PersonName) ため、編集ダイアログには表示されません。

  2. 非表示 (hidden:true) であるが edithidden:true を持つ 2 番目の列は、編集ダイアログに表示され、値 (これは PersonId になります) プロパティの書き込みに使用されます。

これは機能しますが、実際には 1 つのデータを表す 2 つの異なる列を使用する以外に、この問題を解決するためのより洗練された方法があるかどうかを確認したかったのです。

4

3 に答える 3

2

jqGrid は、セルが編集されたときに呼び出される多くのコールバックを提供します (こちらを参照)。

そのうちの 1 つで、データがサーバーに送信される直前に呼び出され、サーバーにserializeCellData送信される前にデータをシリアル化する方法を変更できます。この関数は、jqGrid が( github{cellsubmit: 'remote', cellurl: <a non empty url>}で見つかったコードに基づいて)で構成されている場合に呼び出されます。

PersonName その関数のキー ( -> )を変更しようとしPersonIdます。

于 2013-08-30T07:14:29.017 に答える