我想在点击按钮之前检查是否有任何验证剂量火

时间:2011-07-12 07:29:44

标签: jqgrid

我启用了JQGrid并启用了就地编辑。 数据库字段 名字(必填) 姓氏(不是必需的)

以下是该方案:

带有编辑和删除按钮的

1。网格 2。点击编辑然后(编辑,删除将隐藏)和(保存,取消将显示)。
3。我已从FirstName文本框清除了价值 4. 我按下提交按钮,然后会显示“名字:字段是必填项”这是正确的
5。但在我的按钮后面(保存,取消将替换为编辑,删除这是错误的

我想在以下功能中加入检查点

function inplaceSave(id) {
        //Check point is required for Any Validation violation or unsuccessful save 
        jQuery('#list').saveRow(id);
        //if it is success then following method should called else couldn't
        changeActionState('save', id);
    }

以下是代码:

jQuery(document).ready(function () {
        //$.jgrid.defaults.loadtext = '';
        jQuery("#list").jqGrid({
            url: '@Url.Action("JQGridGetGridData", "TabMaster")',
            datatype: 'json',
            mtype: 'GET',
            colNames: ['col ID', 'First Name', 'Last Name', ''],
            colModel: [
                      { name: 'colID', index: 'colID', width: 100, align: 'left', searchoptions: { sopt: ['eq', 'ne', 'cn']} },
                      { name: 'FirstName', index: 'FirstName', width: 150, align: 'left', editable: true, editrules: { required: true, number: true, minValue: 40, maxValue: 100} },
                      { name: 'LastName', index: 'LastName', width: 150, align: 'left', editable: true },
                      { name: 'Edit', index: 'Edit', width: 70, align: 'center', editable: false, formatter: editFmatter, unformat: unformatEdit }
                    ],
            pager: jQuery('#pager'),
            hidegrid: false,
            rowNum: 100, 
            rowList: [10, 50, 100, 150],
            sortname: 'colID',
            sortorder: "asc",
            viewrecords: true,
            multiselect: false,
            //rownumbers: true, 
            imgpath: '@Url.Content("~/Scripts/themes/steel/images")',
            caption: 'Tab Master Information',
            editurl: '@Url.Action("JQGridEdit", "TabMaster")'
        }).navGrid('#pager', { edit: false, add: false, del: false, search: false, refresh: false });
    });
function inplaceEdit(id) {
        jQuery('#list').editRow(id);
        changeActionState('edit', id);
    }
    function inplaceCancel(id) {
        jQuery('#list').restoreRow(id);
        changeActionState('cancel', id);
    }
    function inplaceSave(id) {
        jQuery('#list').saveRow(id);
        changeActionState('save', id);
    }
 function changeActionState(action, id) {
        if (action == 'edit') {
            jQuery('#action_edit_' + id).css('display', 'none');
            jQuery('#action_delete_' + id).css('display', 'none');
            jQuery('#action_save_' + id).css('display', 'block');
            jQuery('#action_cancel_' + id).css('display', 'block');
        }
        else {
            jQuery('#action_edit_' + id).css('display', 'block');
            jQuery('#action_delete_' + id).css('display', 'block');
            jQuery('#action_save_' + id).css('display', 'none');
            jQuery('#action_cancel_' + id).css('display', 'none');
        }
    }

2 个答案:

答案 0 :(得分:0)

editRow这样的内联编辑(非就地编辑)方法作为一个参数更多。附加参数允许您在成功和不成功的数据验证或数据保存的情况下执行不同的操作。

您使用的是哪个版本的jqGrid?为什么继续使用imgpath这样的参数?为什么你不使用formatter:'actions'?它似乎完全符合你的需要。此外,您的代码中还不清楚调用inplaceSave的方式和时间。

此外,您在one of your previous question中作为解决方案发布的editFmatter代码似乎是错误的。它可以用于从服务器发送的Edit列的某些空间包含,以及您未包含在问题文本中的列。 custom formatter将单元格公共文本作为输入。代码$(el)中的表达式function editFmatter(el, cellval, opts) {...;$(el).html(finalHTML)毫无意义。自定义格式化程序的参数为(cellvalue, options, rowObject)。您可能希望使用custom editing而非自定义格式,但应以其他方式使用:edittype:'custom', editoptions:{custom_element: editFmatter,...

答案 1 :(得分:0)

我已经解决了这个问题我自己,使用修改后的函数 inplaceSave 并添加了新功能 checkSave

以下是更新后的代码。

 function inplaceSave(id) {
       jQuery('#list').saveRow(id, checkSave);
   }
   function checkSave(result) {
       if (result.responseText.toLowerCase() == 'success') {
           changeActionState('save', this.rowid);
           refreshGrid();
       }
   }

谢谢,
Imdadhusen