2011-01-17 32 views
8

Tôi gặp một số sự cố khi nhận một số ô (với cellEdit: true) thành không thể chỉnh sửa được mặc dù cột được đặt thành có thể chỉnh sửa.JQGrid: Tự động đặt ô thành không thể chỉnh sửa dựa trên nội dung

Tôi đã thử nhiều cách, như trướcEditCell, trình định dạng, v.v. Không có cách nào hoạt động.

Gần nhất tôi có được bằng cách đặt trình định dạng thành cột mà tôi muốn chỉnh sửa và sau đó sử dụng setCell để đặt lớp 'không thể chỉnh sửa ô' (đoạn dưới đây). Lần đầu tiên bạn nhấp vào ô, rất tiếc là nó sẽ chuyển sang chế độ chỉnh sửa, nhưng nếu bạn nhấp vào nơi khác và cố gắng chỉnh sửa lại ô, nó sẽ không thể chỉnh sửa thành công.

Tôi cũng đã thử sử dụng cùng một phần đã bị xóa nhưng bên trong trước EdititCell, nó dừng thành công ô được chỉnh sửa nhưng lần lượt 'đóng băng' lưới. Bạn không còn có thể chọn bất kỳ ô nào khác.

function noEditFormatter(cellValue, options, rowObject) { 
    if (cellValue == 'test') 
     jQuery("#grid").jqGrid('setCell', options.rowId, 'ColName', '', 'not-editable-cell'); 
    return cellValue; 
} 

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

12

Ý tưởng sử dụng phương thức setCell để thêm lớp 'ô không thể chỉnh sửa' vào các ô không thể chỉnh sửa là chính xác. Bạn chỉ chọn sai địa điểm để làm điều này. Bên trong định dạng tùy chỉnh, lưới có thể chưa được xây dựng cho đến cuối. Tôi khuyên bạn nên sử dụng loadComplete hoặc gridComplete để kiểm tra lưới chứa của trang hiện tại và đánh dấu một số ô là không thể chỉnh sửa.

Tôi đã chuẩn bị an example để minh họa điều này. Giống như trong ví dụ của bạn, tất cả các ô có văn bản "thử nghiệm" được đánh dấu là không thể chỉnh sửa. Trong cách bạn có thể kiểm tra một ô và đánh dấu một ô khác là không thể chỉnh sửa.

+0

Cảm ơn một nhóm, điều này hoạt động hoàn hảo. – Shawn

+0

@Shawn: Bạn hoan nghênh! – Oleg

+0

@Oleg: Tôi muốn jqgrid hoàn chỉnh trong khi tải chính nó với vài ô ở chế độ có thể chỉnh sửa trong mỗi hàng. Điều đó có thể không. Tôi không thể tìm thấy bất cứ điều gì thông qua tìm kiếm. Xin hãy giúp –

3
var cellattr = function(rowId, tv, rawObject, cm, rdata) { 
if(rawObject.locked) return ' class="not-editable-cell"'; 

};

Trong colModel: mỗi tùy chọn cột thêm

{name: 'name',index: 'name', editable: true, width: 100, sortable: false, align: 'center', cellattr: cellattr} 
1

tôi phải giải quyết này ngay bây giờ (2015) và thấy an approach that looks clean: chỉ định một chức năng cho cellbeginedit trả false nếu ô không được phép chỉnh sửa. Trích từ bài viết được liên kết và sửa đổi:

var checkIfRowIsValid = function (rowIndex) { 
    //somehow get cellValue 
    ... 
    if (cellValue == 'test') return false; 
} 
// initialize jqxGrid 
$("#jqxgrid").jqxGrid(
{ 
    source: dataAdapter, 
    editable: true, 
    selectionmode: 'singlecell', 
    columns: [ 
     { text: 'First Name', columntype: 'textbox', datafield: 'firstname', 
     width: 90, cellbeginedit: checkIfRowIsValid}, 
     { text: 'Last Name', datafield: 'lastname', columntype: 'textbox', 
     width: 90, cellbeginedit: checkIfRowIsValid} 
    ] 
}); 
+2

Ví dụ này đang sử dụng jqxGrid. OP đang sử dụng jqGrid. – svattom

Các vấn đề liên quan