private void populateData(final List<QuestionAnswerStoreDto> data) { dataGrid.clear(true); updateSaveButtonStatus(false); if (data != null && data.size() > 0) { statusLabel.setVisible(false); dataGrid.resize(data.size() + 2, 3); loadHeaderRow(); for (int i = 0; i < data.size(); i++) { final int idx = i; dataGrid.setWidget(i + 1, 0, new Label(data.get(i).getSurveyInstanceId().toString())); TextBox temp = new TextBox(); temp.setText(data.get(i).getValue()); currentTextboxes.add(temp); temp.addChangeHandler( new ChangeHandler() { @Override public void onChange(ChangeEvent event) { String oldVal = data.get(idx).getValue(); String newVal = ((TextBox) event.getSource()).getValue(); if (!newVal.trim().equals(oldVal)) { dataGrid.getCellFormatter().setStyleName(idx + 1, 1, EDITED_ROW_CSS); // create a new copy of the answer so we don't // overwrite the old value QuestionAnswerStoreDto newAnswer = new QuestionAnswerStoreDto(); newAnswer.setKeyId(data.get(idx).getKeyId()); newAnswer.setArbitratyNumber(data.get(idx).getArbitratyNumber()); newAnswer.setCollectionDate(data.get(idx).getCollectionDate()); newAnswer.setType(data.get(idx).getType()); newAnswer.setQuestionID(data.get(idx).getQuestionID()); newAnswer.setValue(newVal.trim()); newAnswer.setSurveyId(data.get(idx).getSurveyId()); newAnswer.setSurveyInstanceId(data.get(idx).getSurveyInstanceId()); newAnswer.setOldValue(data.get(idx).getValue()); changedAnswers.put(newAnswer.getKeyId(), newAnswer); } else { dataGrid.getCellFormatter().setStyleName(idx + 1, 1, ""); changedAnswers.remove(data.get(idx).getKeyId()); } if (changedAnswers.size() > 0) { updateSaveButtonStatus(true); } else { updateSaveButtonStatus(false); } } }); dataGrid.setWidget(i + 1, 1, temp); dataGrid.getCellFormatter().setStyleName(idx + 1, 1, ""); dataGrid.setWidget(i + 1, 2, new Label(DATE_FMT.format(data.get(i).getCollectionDate()))); } if (data.size() >= 20) { nextButton.setVisible(true); } else { nextButton.setVisible(false); } if (currentPage > 0) { previousButton.setVisible(true); } else { previousButton.setVisible(false); } dataGrid.setWidget(data.size() + 1, 0, paginationPanel); dataGrid.setWidget(data.size() + 1, 1, saveButton); dataGrid.setWidget(data.size() + 1, 2, clearButton); } else { dataGrid.resize(1, 1); statusLabel.setText(TEXT_CONSTANTS.noResponsesForQuestion()); statusLabel.setVisible(true); } }