2012-11-16 2 views
1

다음 행을 선택하면 각 행에 체크 상자가 있고 도구 모음에는 필터 버튼 (및 다른 버튼)이 있습니다.검도 - 그리드 - 여러 행 제거

var grid = $("#resultsGrid").data("kendoGrid"); 
grid.tbody.find("input:checked").closest("tr").each(function(index) { 
    grid.removeRow($(this)); 
}); 

그러나 제거되는 행 수가 20을 초과하면 성능이 문제가되기 시작합니다. 그러나 검도는 20 줄 이상을 훨씬 빠르게 필터링 (제거)합니다. 검도가 여러 행을 뷰에서 제거하는 것을 어떻게 필터링합니까? 아니면 그리드에서 여러 행을 제거하는 더 좋은 방법이 있습니까? 귀하의 도움에 미리 감사드립니다.

답변

4

** 새 위치로 바이올린을 업데이트 - 이전과 같은 코드 **

직접 데이터를 처리하십시오. 확인란을 행의 ID에 연결하고 그 행을 필터링하십시오.

필자는 배열 요소를 제거하고 그리드를 다시 만드는 바이올린을 연결했습니다. 표의 상단에있는 2 개의 텍스트 상자는 제거하려는 ID의 범위를 캡처합니다 (이것은 checkboxIds의 동일한 배열입니다). 그런 다음 "제거 ID"를 순환하여 데이터 배열에서 제거하고 표를 다시 작성합니다.

필자는 이전의 바이올린을 약간 수정했기 때문에 DataSource 개체를 직접 처리하는 대신 그리드를 다시 만들고 있습니다. 하지만 내가하는 일의 요지를 얻으시기 바랍니다.

이 예제에서는 1000 개의 레코드 (3 개의 열만 있음)가 있지만 매우 빨리 950 개의 레코드가 제거됩니다.

Fiddle- Remove from data array

당신이 KendoUI 데이터 소스 객체와이의 예를 필요로하는 경우 알려주세요.

StackOverflow가 없으면 게시하지 않기 때문에이 코드를 아래에 포함 시켰습니다.

function filterData() { 

    var val1 = $("#val1").val(); 
    var val2 = $("#val2").val(); 

    var removeIndexes = new Array(); 

    for (var i = val1; i <= val2; i++) { 
     removeIndexes.push(i); 
    }  

    $(removeIndexes).each(function(removeIndex) { 
     var removeItemId = this; 
     $(randomData).each(function(dataIndex) { 
      var continueLoop = true; 
      if (this.Id == removeItemId) { 
       randomData.splice(dataIndex, 1); 
       continueLoop = false; 
      } 
      return continueLoop; 
     }); 
    }); 

    createGrid(); 
} 
+0

는 당신의 도움을 주셔서 감사합니다! 응답 지연에 대해 사과드립니다. 그리드에 많은 열이 있으며 그리드를 다시 그리는 데 너무 느립니다. 페이지로드 중에 한 번만 만듭니다. 그러나 당신의 대답은 올바른 방향으로 나를 지적했습니다. 제안한대로 데이터 저장소 데이터를 변경하고 있지만 다시 작성하는 대신 표를 새로 고칩니다. 또한 그리드의 개체는 약 50 개의 소품과 복잡합니다. 접합은 너무 느립니다 (복잡한 물체 때문에요?). 대신 체크 된 ID가없는 항목 만 밀어 넣는 새로운 데이터 배열을 만들었습니다. 도와 줘서 고마워. – James

+0

안녕하세요, 위의 코드를 사용해 보았습니다. 그러나 데이터가 70 행 이상이면 브라우저가 느려지고 응답하지 않는 스크립트 경고가 표시됩니다. 로딩 시간 개선을위한 해결책이 있습니까? – Razack

+0

바이올린을 업데이트 할 수 있습니까? 나는 정말로 그것을 필요로한다. –

1

당신은 일괄 업데이트를 사용해야합니다

$("#resultsGrid").kendoGrid({ 
    dataSource: { 
     batch: true, 
     ... 
    }, ...}); 

var grid = $("#resultsGrid").data("kendoGrid"); 
grid.tbody.find("input:checked").closest("tr").each(function() { 
    var dataItem = grid.dataItem(this); 
    grid.dataSource.remove(dataItem); 
}); 
grid.dataSource.sync(); // this applies batched changes 
+0

일괄 업데이트를 사용하는 경우 확실히 이동하는 방법입니다. – jrummell