0

サーバー側でC#を使用して列モデルを生成し、jSONをグリッドに渡します。ここで、ドロップダウン機能を提供する1つの列が必要です。しかし、それはうまくいきません、これは私がこれまでに持っているものです:

StringBuilder deptDetails = new StringBuilder();
foreach (Department dept in departmentList)
{
    deptDetails.Append(dept.DepartmentID);
    deptDetails.Append(":'");
    deptDetails.Append(":'" + dept.DepartmentName + "',");
    deptDetails.Append(',');
}
deptDetails.Length -= 1;

colModel[i] = new ColumnMod
{
    name = selectedItems[i].ToString(),
    index = selectedItems[i].ToString(),
    width = 100,
    editable = true,
    edittype = "select",
    align = "left",
    editoptions="{value:{" + deptDetails + "}}"
 };

これが私のcolumnmodelクラスです:

public class ColumnMod
{
    public string name { get; set; }
    public string index { get; set; }
    //public Boolean key { get; set; }
    public Int32 width { get; set; }
    public Boolean editable { get; set; }
    public string edittype { get; set; }
    //public Boolean sortable { get; set; }
    public string align { get; set; }
    //public Boolean hidden { get; set; }
    public string editoptions { get; set; }
}

編集:

これが私のJSコードです:

$grid.jqGrid({
    colNames: selectedItems,
    colModel: columnSelected,
    sortname: selectedValues[0],
    sortorder: "asc",
    editurl: 'url',
    cellsubmit: 'clientArray',
    cellEdit: true,
    rowNum: 5000,
    rownumbers: true,
    rownumWidth: 30,
    autowidth: true,
    shrinkToFit: true,
    gridview: true,
    pager: '#gridPager',
    viewrecords: true,
    recordtext: "Total Rows: {2}",
    jsonReader: {
        root: "rows",
        page: "page",
        total: "totalpages",
        records: "totalrecords",
        cell: "cell",
        id: selectedValues[0], //index of the column with the PK in it 
        userdata: "userdata",
        repeatitems: true
    },
    prmNames: {
        rows: "numRows",
        page: "page",
        sort: "sortField",
        order: "sortOrder"
    },
    datatype: function (postdata) {
        if (lastSortField != postdata.sortField || lastSortOrder != postdata.sortOrder)
         {   if (!$('#btnValidate').is(':disabled')) {
                lastSortField = postdata.sortField;
                lastSortOrder = postdata.sortOrder;
            }
        }
    }

これは私がcolumnModelで値を取得する方法です:

function getSelectedColumnsJSON(selectedValues) {
try {
    $.ajax({
        type: "POST",
        url: window.location.protocol + '//' + window.location.host + window.location.pathname + "/getSelectedColumnsJSON",
        data: $.toJSON({
            selectedItems: selectedValues
        }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (data, status) {
            if (data.d)
                columnSelected = data.d;
        },
        error: function (error) {
            ShowMessage(error.responseText);
        }
    });
}
catch (ex) {
    ShowMessage(ex.message);
}

}

列にドロップダウン選択が表示されますが、空です。ここで説明されている形式に従おうとしました。何か助けがありますか?

4

1 に答える 1

1

グリッドを埋めるために使用するJSONデータを投稿していないため、問題を正しく理解しているかどうかはわかりません。入力データに値を投稿しますDepartmentIDか?DepartmentNameおそらく、フォーマッターを使用する必要があります。「select」を追加すると、既存の問題が解決しますか?

実装する必要のある完全なシナリオはわかりませんが、通常は、 editoptionsのプロパティを使用するdataUrl代わりに使用することをお勧めします。おそらく、プロパティを実際に使用する必要があるのは、の使用法だけです。サーバーから返されたデータに文字列データではなくIDが含まれている場合にのみ、このオプションは使用できません。valuevalueformatter:'select'dataUrl

于 2012-11-08T07:49:08.053 に答える