def setDataParameter(self, index, value, role=Qt.EditRole):
        if not index.isValid() or not (0 <= index.row() < PARAMETER_ROW_COUNT):
            return False

        parameter = self.entity.Item
        if parameter is None:
            return False

        row = index.row()
        column = index.column()
        if role == Qt.EditRole:
            if column == COLUMN.PROPERTY:
                return False    # should not happen; this column should not be editable
            elif column == COLUMN.VALUE:
                if row == PARAMETER_ROW.ID:
                    parameter.setId(str(value))
                elif row == PARAMETER_ROW.NAME:
                    parameter.setName(str(value))
                elif row == PARAMETER_ROW.VALUE:
                    parameter.setValue(float(value))
                elif row == PARAMETER_ROW.UNITS:
                    parameter.setUnits(str(value))
                elif row == PARAMETER_ROW.CONSTANT:
                    parameter.setConstant(typehelpers.stringToBool(value))

                self.dataChanged.emit(index, index)
                return True
        return False
    def setDataSpecies(self, index, value, role=Qt.EditRole):
        if not index.isValid() or not (0 <= index.row() < SPECIES_ROW_COUNT):
            return False

        species = self.entity.Item
        if species is None:
            return False

        row = index.row()
        column = index.column()
        if role == Qt.EditRole:
            if column == COLUMN.PROPERTY:
                return False
            elif column == COLUMN.VALUE:
                if row == SPECIES_ROW.ID:
                    self.entity.setId(str(value))
                elif row == SPECIES_ROW.NAME:
                    species.setName(str(value))
                elif row == SPECIES_ROW.COMPARTMENT:
                    species.setCompartment(str(value))
                elif row == SPECIES_ROW.INITIALQUANTITY:
                    self.setSpeciesInitialQuantity(species, value)
                elif row == SPECIES_ROW.SUBSTANCEUNITS:
                    species.setSubstanceUnits(str(value))
                elif row == SPECIES_ROW.QUANTITYTYPE:
                    self.setQuantityType(species, value)
                elif row == SPECIES_ROW.CONSTANT:
                    species.setConstant(typehelpers.stringToBool(value))
                self.dataChanged.emit(index, index)
                return True
        return False