1

ElementRowサーバー コードに、オブジェクトのリストを返す関数があります。

public class ElementRow {
    public string AreaName { get; set; }
    public YearData CurrentYear { get; set; }
    public YearData PreviousYear { get; set; }
}

public class YearData {
    public int Value1 { get; set; }
    public int Value2 { get; set; }
}

これらのクラスは、次のような json を生成します。

{"d":
    {
        "Total":2,
    "Page":1,
    "Records":30,
    "Rows":[
        {"AreaID":0,"CurrentYear":{"Value1":1,"Value2":2},"PreviousYear":{"Value1":1,"Value2":2}},
        {"AreaID":1,"CurrentYear":{"Value1":5,"Value2":4},"PreviousYear":{"Value1":1,"Value2":2}},
        {"AreaID":2,"CurrentYear":{"Value1":2,"Value2":1},"PreviousYear":{"Value1":1,"Value2":2}},
        {"AreaID":3,"CurrentYear":{"Value1":1,"Value2":3},"PreviousYear":{"Value1":1,"Value2":2}}
    ],
    "UserData":null
    }
}

このデータ構造をサポートするように colModel を定義しました。カスタム フォーマッタ関数を作成してYearData、1 つの列の型のオブジェクトをフォーマットしたいと考えています。私の colModel は次のとおりです。

$("#dashboard").jqGrid({
    url: wsBaseUrl + 'MyWebService.asmx/MyMethod',
    colNames: ['Area Name','Current Year', 'Previous Year'],
    colModel: [
        { name: 'AreaName', index: 'AreaName', width: 120, template: colTextTemplate },
        { name: 'CurrentYear', index: 'CurrentYear', width: 100, align: 'center', sortable: false, formatter: YearDataFormatter },
        { name: 'PreviousYear', index: 'PreviousYear', width: 100, align: 'center', sortable: false, formatter: YearDataFormatter }
    ],
    jsonReader: {
        id: "AreaID"
    },
    pager: $('#dashboard_pager'),
    sortname: 'AreaName',
    sortorder: "asc",
    height: '250',
    rownumbers: false,
    gridview: false,
    subGrid: true,

    //subgrid definition omitted
});

次に、YearDataFormatter関数を次のように定義しました。

function YearDataFormatter(cellvalue, options, rowObject) {
    var table = "<table><tr>";
    table += "<td>" + cellvalue.Value1 + "</td>";
    table += "<td>" + cellvalue.Value2 + "</td>";
    table += "</tr></table>";
    return table;
}; 

とにかく、この関数を実行しようとすると、YearDataFormatter関数内でcellvalueパラメーターの値が定義されていないのに、デバッガーで見ると、rowObjectパラメーター内に有効な値があるという問題があります。

そのセルの値に正しくアクセスするにはどうすればよいですか?

また、特定の列のヘッダーを変更する機会はありますか? 2 行のヘッダーを作成したいのですが、colNamesオプション内にマークアップを追加すると、それに応じてヘッダーの高さが変わりません。

ご協力ありがとうございました!

4

1 に答える 1

3

グリッドを埋めるために使用されるJSONまたはXMLデータとjqGridの定義を投稿していません。ローカル データまたはloadone:true内部データを使用する場合は保存され、すべてが別の方法で機能します。そのため、設定に応じてカスタム フォーマッタを使用する必要があります。

情報が少ないので推測してみます。私はあなたが使うべきだと思います

function YearDataFormatter(cellvalue, options, rowObject) {
    var table = "<table><tr>",
        cellData = rowObject.CurrentYear; // or like rowObject[2]
    table += "<td>" + cellData.Value1 + "</td>";
    table += "<td>" + cellData.Value2 + "</td>";
    table += "</tr></table>";
    return table;
};

サーバーが使用するデータの形式を変更し、dateISO 8601 日付形式を使用するのが最善です。.NET を使用する場合は、.NETの"o" または "O" フォーマッタを使用できますDateTime。その場合はformatter:'date'またはを使用できますformatter:'date', formatoptions:{srcformat:'ISO8601Long'}

UPDATED : jqGrid 定義でより多くのデフォルト設定を使用していると確信しています。追加の設定がないと、JSON データを読み取ることができません。少し変更した後、デモはデータを読み取り、使用するカスタムフォーマッターに問題は見られません:ここを参照してください:

ここに画像の説明を入力

デモと若者を比較して違いを確認できます。

2 番目の質問 (グリッド ヘッダーの複数行データ) については、こちらをご覧になることをお勧めします

于 2011-07-06T17:52:00.447 に答える