Tôi đang sử dụng jqGrid 4.4.0 với chỉnh sửa nội tuyến. Vì lợi ích của câu hỏi này, lưới của tôi có bốn cột: cột ID (SomeGridRowId), cột văn bản có tự động hoàn thành jQuery (Tự động điền), cột văn bản ký tự đơn (SingleChar) và cột boolean
ẩn (CanEditSingleChar). Tôi cần bật hoặc tắt chỉnh sửa cột ký tự đơn dựa trên giá trị của cột CanEditSingleChar
. Tôi đã làm việc này trên các hàng hiện có bằng cách sử dụng onSelectRow
và setColProp
, nhưng vì một lý do nào đó tôi không thể làm cho nó hoạt động chính xác trên các hàng mới được chèn vào. Nếu tôi thêm hàng mới và chọn giá trị từ tự động điền, cột SingleChar
là luôn là không thể chỉnh sửa. Tôi đã từng bước qua Javascript bằng cách sử dụng các công cụ dành cho nhà phát triển Chrome và IE; các giá trị cột và thuộc tính đang được đặt chính xác, nhưng thuộc tínhcủa cột editable
không phản ánh điều này.Thay đổi thuộc tính có thể chỉnh sửa của cột văn bản jqGrid dựa trên kết quả tự động hoàn thành trong một cột khác
Tôi xin lỗi vì đoạn mã khổng lồ, nhưng tôi không muốn để lại bất kỳ thứ gì.
$("#coolGrid").jqGrid({
url: '@Url.Action("GetCoolGridData")',
postData: {
someId: function() { return $("#someId").val(); },
otherStaticArg: function() { return 1; }
},
datatype: 'json',
mtype: 'POST',
loadonce: true,
cellsubmit: 'clientArray',
editurl: 'clientArray',
scroll: true,
pager: $("#coolGridPager"),
rowNum: 200,
sortname: 'SomeGridRowId',
sortorder: 'asc',
viewrecords: true,
height: '100%',
colNames: ['SomeGridRowId', 'CanEditSingleChar', 'Autocomplete', 'SingleChar'],
colModel: [
{ name: 'SomeGridRowId', index: 'SomeGridRowId', hidden: true },
{ name: 'CanEditSingleChar', index: 'CanEditSingleChar', hidden: true },
{
name: 'Autocomplete',
index: 'Autocomplete',
width: 220,
editable: true,
edittype: 'text',
editoptions: {
dataInit: function (elem) {
$(elem).autocomplete({
source: '@Url.Action("GetSomeGridAutocomplete")',
minLength: 2,
select: function (event, ui) {
var rowId = getRowId($(this));
if (ui.item) {
$("#coolGrid").jqGrid('setCell', rowId, 'CanEditSingleChar', ui.item.CanEditSingleChar, '', '');
$("#coolGrid").jqGrid('setCell', rowId, 'Autocomplete', ui.item.label, '', '');
setSingleCharEditMode(rowId);
}
}
});
}
}
},
{
name: 'SingleChar',
index: 'SingleChar',
width: 10,
editable: true, //default to true, most are editable
edittype: 'text'
}
],
onSelectRow: function (clickedRow) {
if (clickedRow && clickedRow != $.coolGridLastSelectedRow) {
$("#coolGrid").jqGrid('saveRow', $.coolGridSelectedRow, false, 'clientArray');
$.coolGridLastSelectedRow = clickedRow;
}
setSingleCharEditMode($.coolGridLastSelectedRow);
$("#coolGrid").jqGrid('editRow', $.coolGridLastSelectedRow, true);
},
afterInsertRow: function (rowid, rowdata, rowelem) {
if (rowid == 'new_row') { //shown solely for completeness, pretty sure this is not the problem
var newRowIndex = $("#coolGridNewRowIndex").val();
if (!newRowIndex)
newRowIndex = 1;
var newRowId = rowid + "_" + newRowIndex;
$("#new_row").attr('id', newRowId);
newRowIndex++;
$("#coolGrid").val(newRowIndex);
$("#coolGrid").jqGrid('setSelection', newRowId, true);
}
}
});
$("#coolGrid").jqGrid('navGrid', '#coolGridPager',
{
add: false,
del: false,
edit: false,
search: false,
beforeRefresh: function() {
$("#coolGrid").jqGrid('setGridParam', { datatype: 'json' });
}
});
$("#coolGrid").jqGrid('inlineNav', '#coolGridPager',
{
edit: false,
add: true,
addtext: "Add",
save: false,
cancel: false,
restoreAfterSelect: false,
addParams: {
position: 'last',
addRowParams: {
keys: true
}
}
});
Và setSingleCharEditMode
chức năng:
function setSingleCharEditMode(rowid) {
var rowData = $("#coolGrid").jqGrid('getRowData', rowid);
if (rowData.CanEditSingleChar === "false") {
$("#coolGrid").jqGrid('setColProp', 'SingleChar', { editable: false });
} else {
$("#coolGrid").jqGrid('setColProp', 'SingleChar', { editable: true });
}
}
Tôi đã thử một loạt toàn bộ công cụ, rifled qua một đống SO câu hỏi khác, googled như điên .... tất cả không có kết quả. Tôi đã dùng để kéo tóc ra. Làm cách nào để kiểm soát thuộc tính editable
của một cột sau khi tự động hoàn thành select
trên một cột khác, tất cả trên một hàng mới?
CHỈNH SỬA
Cuối cùng, tôi đã nhận được working example up here. Nếu bạn thêm hàng và sau đó chọn một trong hai "Không điển hình *" trong cột Autocomplete
, bạn có thể tạo lại hành vi này.
Cảm ơn bạn đã trả lời chu đáo. Tôi đang làm việc để lấy ví dụ trực tuyến ngay bây giờ. –
Bạn có tiến bộ không? Và bạn nghĩ gì về việc gán tiền thưởng đó? Tôi nghĩ sẽ không còn câu trả lời nào nữa trước khi thời gian gia hạn kết thúc. – Wolfram
Xin lỗi, Wolfram, tuần bận rộn tuần trước và tôi không có thời gian để lấy mẫu hoàn chỉnh. Tôi hy vọng sẽ làm việc trên nó ngày hôm nay, nhưng tiền thưởng là của bạn (mặc dù tôi không chắc chắn tại sao nó chia nó thành 100). –