ホームページ >バックエンド開発 >C++ >jqGrid で間接データ (ID からの都市名など) を表示するにはどうすればよいですか?

jqGrid で間接データ (ID からの都市名など) を表示するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-23 07:02:15215ブラウズ

How Can I Display Indirect Data (e.g., City Names from IDs) in a jqGrid?

jqGrid: 間接データ表示の処理

表形式のデータを扱うときは、さまざまな表のデータを表示する必要があることがよくあります。たとえば、学生の名前と都市 ID を含むメイン テーブルと、都市 ID を実際の都市名にマップする別のテーブルがある場合、都市 ID の代わりに都市名をグリッドに表示することができます。

直接接続方式の制限事項

一般的なアプローチは、都市 ID フィールドに基づいてこれらのテーブルを結合することです。ただし、実際の都市名の代わりに都市 ID フィールドを含むクラス構造を使用している場合、このアプローチは現実的ではありません。

解決策: ルックアップ関数を使用して ID をデコードします

この問題を解決するために、jqGrid は formatter: "select" 関数を提供します。この関数を使用すると、都市 ID を対応する都市名にデコードできます。ただし、このデコードを実行するには値マップが必要であり、このマップは jqGrid がサーバー応答を処理する前に設定する必要があります。

推奨されるアプローチは、「select」フォーマッタを使用して列に使用される追加の editoptions.value 属性データでサーバー応答を拡張することです。この拡張応答は次の形式にすることができます:

<code class="language-json">{
    "cityMap": {"11": "Chennai", "12": "Mumbai", "13": "Delhi"},
    "rows": [
        { "SID": "1",  "SNAME": "ABC", "CITY": "11" },
        { "SID": "2",  "SNAME": "XYZ", "CITY": "12" },
        { "SID": "3",  "SNAME": "ACX", "CITY": "13" },
        { "SID": "4",  "SNAME": "KHG", "CITY": "13" },
        { "SID": "5",  "SNAME": "ADF", "CITY": "12" },
        { "SID": "6",  "SNAME": "KKR", "CITY": "11" }
    ]
}</code>

jqGrid 設定では、次のように列を構成できます:

<code class="language-javascript">colModel: [
    {name: "SNAME", width: 250},
    {name: "CITY", width: 180, align: "center"}
],
beforeProcessing: function (response) {
    var $self = $(this);
    $self.jqGrid("setColProp", "CITY", {
        formatter: "select",
        edittype: "select",
        editoptions: {
            value: $.isPlainObject(response.cityMap) ? response.cityMap : []
        }
    });
},
jsonReader: { id: "SID"}</code>

このメソッドを使用すると、サーバーから受信したデータに基づいて列オプションを動的に設定できます。また、言語設定の指定や選択要素内の多数の項目の処理など、より複雑なシナリオを柔軟に実装できるようになります。

以上がjqGrid で間接データ (ID からの都市名など) を表示するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。