0

私のコード....

public string ConstructButtonEvents(string buttonid, string gridID, string GridControlId, string ActionUrl)
    {
        StringBuilder sbButtonEvents = new StringBuilder();
        GridControlId = GridControlId.Trim();
        sbButtonEvents.Append(" $('#" + buttonid + "').die().live('click', function () { ");
        sbButtonEvents.Append("var SelectedArtifactDetails = new Array();");
        sbButtonEvents.Append(" var CurrentArtifactDetails = new Array();");
        sbButtonEvents.Append("for (var i = 0; i < $('#" + gridID + " tbody tr').length; i++) {");
        sbButtonEvents.Append(" var rowId = jQuery('#" + gridID + " tr:eq(' + i + ')').attr('id');");
        sbButtonEvents.Append("var row = $('#" + gridID + "').jqGrid('getRowData', rowId);");

        sbButtonEvents.Append(" if (($('#Status" + GridControlId + "'+rowId).attr('checked') == 'checked') && ($('#Status" + GridControlId + "'+rowId).attr('disabled') != 'disabled')) {");

        sbButtonEvents.Append("CurrentArtifactDetails = {");
        sbButtonEvents.Append(" Complete: 'Y',");
        sbButtonEvents.Append("StakeHolderEmail: $('#Stakeholder" + GridControlId + "'+rowId).attr('value'),");
        sbButtonEvents.Append("UploadFile: $('#uploadFile" + GridControlId + "'+rowId).attr('value'),");
        sbButtonEvents.Append("PhaseArtifactId: $(row).attr('ID'),");

        sbButtonEvents.Append("Status: $('#list" + GridControlId + "'+rowId+'  option:selected').text()");
        sbButtonEvents.Append("};");

        sbButtonEvents.Append("SelectedArtifactDetails.push(CurrentArtifactDetails);");
        sbButtonEvents.Append("}");
        sbButtonEvents.Append("}");

        sbButtonEvents.Append(" $.ajax({");
        sbButtonEvents.Append(" url: '" + ActionUrl + "',");
        sbButtonEvents.Append(" async: false,");
        sbButtonEvents.Append(" loadonce:false, type: 'POST', dataType: 'json', data: JSON.stringify(SelectedArtifactDetails), contentType: 'application/json; charset=utf-8',");
        sbButtonEvents.Append(" success: function () {");
        //sbButtonEvents.Append(" $('#" + gridID + "').jqGrid('GridUnload');");
        sbButtonEvents.Append(" $('#" + gridID + "').trigger('reloadGrid');");            
        sbButtonEvents.Append(" }, error: function () { alert('error'); }");
        sbButtonEvents.Append("});");
        sbButtonEvents.Append("});");

        return sbButtonEvents.ToString();
    }

複数のタブがありますが、グリッド ID の生成は完璧です。私は.cs自体でグリッドを構築しています。行のデータをDBに更新する必要があります。だから、私は更新ボタンを持っています...それをクリックすると、データを投稿(ajax)します。データは順調に更新されています。しかし、グリッドはリロードされていません。

更新ボタンをクリックすると、値が取得され、以下の ajax 投稿が呼び出されます

$.ajax({ url: '/SDLCMClassic/EditProject/BatchUpdate',
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify(SelectedArtifactDetails),
    contentType: 'application/json; charset=utf-8',
    success: function () {
        $('#tblArtifact1').trigger('reloadGrid');
    }, error: function () { alert('error'); }
});

});

グリッド内の行の値を取得でき、正常に投稿できました。DBでも更新されています。ただし、即時リロードは行われません。ページ全体を更新すると、更新されたデータしか表示されません。

jsでjqgridを構築するコードは次のとおりです

$(function () {
    $('#tblArtifact1').jqGrid({
        url: '/SDLCMClassic/EditProject/FillArtifactGrid?ppmno=188035&phaseName=Project Startup',
        datatype: 'json',
        mtype: 'GET',
        colNames: ['Artifact', 'Complete', 'Status', 'Stakeholder', 'App Reference', 'Document', 'URL', 'ID'],
        colModel: [
        { name: 'Name', index: 'Name', editable: false, edittype: '', align: 'left', key: false, hidden: false, formatter: 'showlink', formatoptions: { target: '_blank', baseLinkUrl: '' }, width: $(window).width() * .1, sortable: false },
        { name: 'Complete', index: 'Complete', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .06, sortable: false },
        { name: 'Status', index: 'Status', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .10, sortable: false },
        { name: 'StakeHolderEmail', index: 'StakeHolderEmail', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .15, sortable: false },
        { name: 'App Reference', index: 'App Reference', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .15, sortable: false },
        { name: 'Document', index: 'Document', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .18, sortable: false },
        { name: 'URL', index: 'URL', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .15, sortable: false },
        { name: 'ID', index: 'ID', editable: false, edittype: '', align: 'center', key: false, hidden: true, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .01, sortable: false }
         ],
        viewrecords: true,
        sortname: 'Complete',
        sortorder: 'asc',
        width: 'auto',
        height: 'auto',
        subGrid: true,
        subGridRowExpanded: function (subgrid_id, row_id) {
            $('#' + subgrid_id).html(renderhtmlforSubgrid(this, subgrid_id, row_id));
        },
        gridComplete: function () {
            var dataIds = $('#tblArtifact1').jqGrid('getDataIDs');
            for (var i = 0; i < dataIds.length; i++) {
                $('#tblArtifact1').editRow(dataIds[i], false);
            }
        },
        loadComplete: function () {
            ModifyGridDefaultStyles('tblArtifact1');
        }
    });
});
4

1 に答える 1

2

コードの最も重要な部分であるjqGridを定義するコードは投稿していません。だから私は推測する必要があります。

グリッドをリロードしない場合の一般的な問題は、jqGridでオプション.trigger('reloadGrid');を使用するためです。初期値または値からloadonce: trueに変更されます。したがって、リロードは機能しますが、ローカルデータをリロードします。サーバーからデータをリロードする必要がある場合は、初期値またはトリガー前にリセットする必要があります。詳細については、回答回答を参照してください。datatype"json""xml"datatype: "local"datatype"json""xml"reloadGrid

于 2012-06-06T12:18:34.073 に答える