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);
    }
  }