나는 잘 알고있는 다른 표 컨트롤로 쉽게 해결할 수있는 일반적인 문제가 있습니다. jqgrid에서, 나는 아주 곤란하다. 인라인 편집이 가능한 jqgrid가 있습니다. 행을 편집 할 때 (또는 새 행을 추가 할 때) ColumnC의 값이 ColumnA * ColumnB로 자동 계산되도록 스크립팅을 추가하고 싶습니다. 사용자는 언제든지 모든 열의 값을 변경할 수 있습니다. 사용자가 데이터를 저장하고 데이터가 저장 될 때까지 기다리지 않고 즉시이 값을 계산하기를 원합니다.jqgrid에서 편집하는 동안 열 값을 계산하는 방법
내 접근 방식은 지금까지 COLUMNA 및 COLUMNB에 유형 "변화"에 의해 DataEvent를 연결하고있다 - 실제로 이미 값하지만 전체 셀 내용을 반환하지 않는
분명히dataEvents: [
{ type: 'change', fn: function(e) {
var rowid = $("#myGrid").jqGrid('getGridParam','selrow');
var rowData = $("#myGrid").getRowData(rowid);
var cell1 = rowData['ColumnA'];
var cell2 = rowData['ColumnB'];
var newValue = cell1 * cell2;
$("#myGrid").jqGrid('setCell', rowid, 'ColumnC', newValue);
}
},
]
, CELL1 & CELL2 다른 사용자가 여기에서 발견했습니다 How to get a jqGrid cell value. 셀 값을 얻는 유일한 방법은 해당 값을 제거하는 사용자 정의 정규식 사용자 함수를 사용하는 것입니다. 그 외에도, 내가 원하는 것을 성취 할 수있는 더 나은 방법이 있습니까? jqGrid - How to calculated column to jqgrid?과 같은 간단한 것만으로도 데이터를 표시하고 사용자가 업데이트 할 수 없기 때문에 분명히 저를 감당할 수 없습니다.
도움을 주시면 감사하겠습니다.
업데이트 : : 올레그 (Oleg)의지도 후, 내가 필요한 것을 지원하기 위해 getTextFromCell
을 확장 할 수있었습니다.
function getTextFromCell(cellNode) {
var cellValue;
//check for all INPUT types
if (cellNode.childNodes[0].nodeName == "INPUT") {
//special case for handling checkbox
if (cellNode.childNodes[0].type == "checkbox") {
cellValue = cellNode.childNodes[0].checked.toString();
}
else {
//catch-all for all other inputs - text/integer/amount etc
cellValue = cellNode.childNodes[0].value;
}
}
//check for dropdown list
else if (cellNode.childNodes[0].nodeName == "SELECT") {
var newCell = $("select option:selected", cellNode);
cellValue = newCell[0].value;
}
return cellValue;
}
function getCellNodeFromRow(grid,rowId,cellName) {
var i = getColumnIndexByName(grid, cellName);
var cellValue;
//find the row first
$("tbody > tr.jqgrow", grid[0]).each(function() {
//The "Id" column in my grid is at index 2...
var idcell = $("td:nth-child(2)", this);
var currRowId = getTextFromCell(idcell[0])
if (currRowId == rowId) {
cellValue = getTextFromCell($("td:nth-child(" + (i + 1) + ")", this)[0]);
return false;
}
});
return cellValue;
}
getCellNodeFromRow
의 코드가 가장 효율적이지 않습니다. 일치하는 행 노드를 찾으려면 .each()
루프가 있습니다. 그리드에 수천 개의 행이있을 때 속도가 느린 것을 볼 수 있습니다. 행 노드를 찾는 더 좋고/더 효율적인 방법이 있습니까? 이미 행 ID가 있습니다.
이 문제를 해결하면 코드를 게시 할 수 있습니다. Oleg 샘플을 기반으로 행 합계 열을 만들려고했지만 실패했습니다. 변경 이벤트를 호출하는 방법? 입력 텍스트 요소에 변경 사항이 없으므로 아마도 흐리게 처리해야합니다. 쉼표를 소수 구분 기호로 사용하고 공백을 천 단위 구분 기호로 사용하면 Oleg 코드도 실패합니다. – Andrus
@Andrus : Oleg의 생각에 따라 코드를 추가하도록 업데이트했습니다. 쉼표와 소수 자릿수의 경우 [이 예제에 표시된대로] 구문 분석 할 수 있습니다 (http://stackoverflow.com/questions/559112/how-to-convert-a-currency-string-to-a-double-with- jquery 또는 javascript). 난 그냥 내 물건에 대한 문자열 비교가 필요했습니다. 희망이 도움이됩니다. –
감사합니다. 귀하의 질문에 질문에 편집중인 행의 열 값 (eq. 수량 * 가격은 읽기 전용 총 열)을 어떻게 설정하는지 이해할 수 없습니다. 업데이트가 가치를 보여 주며 열 값을 업데이트하지 않습니다. http://stackoverflow.com/questions/3768906/jqgrid-how-to-calculated-column-to-jqgrid는 값을 설정하는 간단한 방법을 보여 주지만 작동하지 않습니다. 행의 가격 또는 가격이 변경된 경우 포맷터가 평가되지 않습니다. – Andrus